2

这真的让我很困惑。知道为什么会发生这种情况吗?

此代码确实有效:

 $.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");
            }
        });
4

4 回答 4

4

第一个片段是错误的语法,不应使用,您会收到警报,因为它是立即调用的,而不是成功时调用的。

您没有收到第二个片段的警报只有两个原因。

  1. 服务器没有返回成功状态码,例如,它是 404、500 等,而不是 200。
  2. 唯一的另一种可能性是返回的 jsonp 不是 jsonp,或者不是有效的 jsonp。

您很可能将 JSONP 与 JSON 混淆了,因此我将分别给您一个示例。首先是json:

{"foo":"bar"}

这是 JSONP ...?callback=somecallbackname&...

somecallbackname({"foo":"bar"})

请注意,somecallbackname将由 jQuery 提供,您必须获取回调 get 参数的值并使用它相应地生成 JSONP。

于 2013-05-02T17:42:05.140 回答
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 控制台上的 net 选项卡,然后查看 http 请求。您将看到服务器返回的错误。

于 2013-05-02T17:39:49.477 回答
0

您从第一个代码片段中获得的警报具有误导性。

何时alert("Success")分配给该success属性,您实际上立即调用它。

你的第二种方法是你想要的。

于 2013-05-02T17:42:11.117 回答
0

第一个示例是错误的 - 的结果alert("Success")被分配为回调,而不是函数。

您的第二个示例更接近,但您将 JSON 和 JSONP 混合在一起。如果您的服务返回 JSON,您应该callback=?从您的请求 url 中删除(实际上,您可以无论如何都删除它,设置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);
    }
});
于 2013-05-02T17:52:25.427 回答