无法执行JavaScript的jQuery功能
我有一个通过回调方法的Jquery自动完成功能。但它似乎并没有运行。无法执行JavaScript的jQuery功能
这里是我的代码:
在客户端:
<script type="text/javascript">
$(document).ready(function() {
alert("hi");
$("#Text1").autocomplete({
minLength: 0,
source: function (request, response) {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: 'BlissMaker.aspx/GetNames',
data: "{ 'sname':'" + request.term + "' }",
dataType: "json",
dataFilter: function (data) { return data; },
success: function (data) {
if (data.d != null) {
response($.map(data.d, function (item) {
return {
label: item.Name,
value: item.Id
}
}))
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.responseText);
}
});
},
focus: function (event, ui) {
$("#Text1").val(ui.item.label);
return false;
}
})
.data("autocomplete")._renderItem = function (ul, item) {
return $("<li></li>")
.data("item.autocomplete", item)
.append("<a><img src='" + item.icon + "' width='32' height='32' /> " + item.Name + "</a>")
.appendTo(ul);
};
}
</script>
在代码隐藏:
[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<States> GetNames(string sname)
{
List<States> sbStates = new List<States>();
con = new SqlConnection("Data Source=PRATEEK\\SQLEXPRESS;Initial Catalog=BD;Integrated Security=True;Pooling=False");
con.Open();
Me mee = (Me)Session["Me"];
qr = "SELECT FBFriends.FB_Id2, ActiveInfo.Name, ActiveInfo.Profile_Pic, ActiveInfo.Gender FROM [FBFriends],[ActiveInfo] WHERE FBFriends.FB_Id1='" + mee.Id + "' AND ActiveInfo.FB_Id=FBFriends.FB_Id2";
ds = new DataSet(qr);
da = new SqlDataAdapter(qr, con);
da.Fill(ds);
ds.Tables[0].Select(ds.Tables[0].Columns[1].ColumnName + " Like '%" + sname + "%' and " + ds.Tables[0].Columns[3].ColumnName + " = 'Female'");
foreach (DataRow row in ds.Tables[0].Rows)
{
States st = new States();
st.Id = row.ItemArray[0].ToString();
st.Name = row.ItemArray[1].ToString();
st.Value = row.ItemArray[1].ToString();
st.Icon = row.ItemArray[2].ToString();
sbStates.Add(st);
}
return sbStates;
}
看来,自动完成功能是没有得到所谓以及警报().. 有关如何调用它的任何建议?
新增: 检查堆栈跟踪后,它给了我一个错误
未知方法名GetNames
有什么建议?
谢谢大家。我终于弄错了。 需要Web方法是为了调用它,也包括的ScriptManager的形式必须是EnablePageMethods=true
我的代码现在工作的一切优秀静态。非常感谢:)
你忘了一个结尾“)”;
$(document).ready(function() {
})
修复该部分后,检查响应和请求在萤火虫或此类的控制台。
尝试清理代码中的错误并重新运行:
Problem at line 19 character 43: Missing semicolon.
}
Problem at line 20 character 41: Missing semicolon.
}))
Problem at line 39 character 13: Expected ')' and instead saw ''.
}
Problem at line 39 character 13: Missing semicolon.
}
这只是在粘贴代码的问题。否则一切都好。我要求逻辑错误 – vini 2012-02-24 18:58:57
@vini你说过:'似乎自动完成功能并没有像Alert()一样被调用。关于如何调用它的任何建议?'编码错误是为什么你的'alert'没有被触发,'autocomplete'没有被调用。你问为什么不是。如果代码不运行,则无法解决逻辑错误。 – 2012-02-24 19:16:26
我相信你错误地理解了这个问题。函数没有被调用意味着它没有显示任何结果,也没有对我在代码隐藏中应用的断点作出反应。但是我承认我没有检查说明未知方法的Intellisense。现在可以帮助我吗? – vini 2012-02-24 19:24:19
我不知道这是否是造成您的问题或没有,但我在你的JQuery注意到$.ajax
叫你在这里有这样一行:
data: "{ 'sname':'" + request.term + "' }",
我发现AJAX调用,如果我Concat的变量和字符串在$.ajax
呼叫data:
场失败。
尝试这种情况:
声明变量外呼这样的:
var dataToSend = "{ 'sname':'" + request.term + "' }";
则data:
字段更改为这样:
data: dataToSend,
这可能或可能无法解决你的问题问题,但它看起来更好!无论如何都要试试!
是否$(document).ready()
被调用?如果不是,你在一个单独的文件中的JavaScript?如果是这样,也许文件本身无法访问,并且ready()
函数甚至没有被调用。检查包含JQuery文件和JavaScript文件的<script src=""></script>
标签。
你可以在控制台输出返回的数据对象吗?只是为了确保回调成功被调用。 – rayfranco 2012-02-24 18:39:03
为什么在你把它们带到这里之前,你没有打开javascript错误来查看错误? – Aristos 2012-02-24 18:47:48
@vini结合我们所有3个答案,_jk._表示您需要修复多个语法错误(其中一个是缺少的括号_Marcin Necsord Szulc_)。然后用一个名为dataToSend的变量(或任何你想要它调用的)替换'data:'部分中的字符串文字。然后运行它,它应该继续工作。 – rcplusplus 2012-02-24 18:53:22