这真让我感到困惑。知道为什么会这样吗?
此代码确实有效:
$.ajax({
type: 'GET',
dataType: 'json',
url: 'http://localhost:3235/Users/searchUsers?callback=?&searchString=' + searchString,
success: alert("Success")
});
此代码不会:
$.ajax({
type: 'GET',
dataType: 'json',
url: 'http://localhost:3235/Users/searchUsers?callback=?&searchString=' + searchString,
success: function(data){
alert("Success");
}
});
答案 0 :(得分:4)
第一个代码段是错误的语法,不应该使用,您会收到警报,因为它会立即调用,而不是成功。
只有两个原因导致您无法通过第二个代码段获取警报。
你最有可能将JSONP与JSON混淆,所以我会给你一个例子。首先是json:
{"foo":"bar"}
这是JSONP ...?callback=somecallbackname&...
:
somecallbackname({"foo":"bar"})
注意,somecallbackname
将由jQuery提供,您必须获取callback get参数的值并使用它来相应地生成JSONP。
答案 1 :(得分:2)
第一个“有效”,因为代码中存在错误。它调用警报并在成功回调中存储它返回的内容。
添加错误处理程序以查看实际问题。
$.ajax({
type: 'GET',
dataType: 'json',
url: 'http://localhost:3235/Users/searchUsers?callback=?&searchString=' + searchString,
success: function(data){
alert("Success");
},
error: function (xhr, status, msg) {
console.log(status, msg);
}
});
如果您无法触发错误处理程序。查看JavaScript控制台上的网络选项卡,然后查看http请求。您将看到服务器返回的错误。
答案 2 :(得分:0)
您从第一个代码段中收到的提醒会产生误导。
将alert("Success")
分配给您实际上立即调用它的success
属性。
你的第二种方法是你想要的。
答案 3 :(得分:0)
第一个例子是错误的 - alert("Success")
的结果被指定为回调,而不是函数。
你的第二个例子更接近了,但你混淆了JSON和JSONP。如果您的服务返回JSON,则应从请求网址中删除callback=?
(实际上,无论如何都可以将其删除,设置dataType:'jsonp'
会自动添加)。
var ajax_url = 'http://example.com:3235/Users/searchUsers?searchString=' + searchString;
$.ajax({
type: 'GET',
dataType: 'json',
url: ajax_url,
success: function(data){
alert("Success");
},
error: function(xhr, status, error){
alert("Error: " + status + " " + error);
},
complete: function(xhr, status){
alert("Complete: " + status);
}
});