$ .ajax()成功调用,但不会运行方法

时间:2013-05-02 17:35:40

标签: javascript jquery ajax json

这真让我感到困惑。知道为什么会这样吗?

此代码确实有效:

 $.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 个答案:

答案 0 :(得分:4)

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

只有两个原因导致您无法通过第二个代码段获取警报。

  1. 服务器未返回成功状态代码,例如,它是404,500等,而不是200.
  2. 唯一的另一种可能性是返回的jsonp不是jsonp,或者是无效的jsonp。
  3. 你最有可能将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);
    }
});