【问题标题】:jquery $.ajax call succeeds but returns nothing. (jsonp)jquery $.ajax 调用成功但不返回任何内容。 (jsonp)
【发布时间】:2011-02-14 13:50:12
【问题描述】:
$(document).ready(function() {
   $('#button').click(function() {
       try {
           var json = $.ajax({url : 'http://www.example.com/experimental/service.php', type : 'jsonp', success : function() {alert('success')}});
           alert(json);
        } catch(err) {
           alert(err.description)
        }
        var sjson = JSON.stringify(json);
       $('#display').html(sjson);
   })
}) 

按下按钮后,我收到一条警告消息,上面写着“成功”,还有一条说未定义,指的是 ajax 调用没有返回任何内容。我检查了 firebug 'net' 选项卡,确实我从“jsonp1272724228884({});”的服务器得到了成功的响应。有任何想法吗?

【问题讨论】:

    标签: jquery ajax jsonp


    【解决方案1】:

    我会认为alert(json); 显示未定义,因为它在收到响应之前正在运行。

    请记住,“ajax”是“异步”的,因此警报会在您的 json 值有机会被分配值之前继续执行。

    此外,即使它确实有效,您的 json 变量也只会引用已创建的 XMLHttpRequest 对象。如果你想访问数据本身,你需要在回调中这样做。

    var json;
    
    $.ajax({
        url : 'http://www.example.com/experimental/service.php', 
        type : 'jsonp', 
        success : function(data) {
                      alert('success');
                      json = data;
                      alert(json);
                  }
    });
    

    编辑:

    您还可以分配一个error: 回调。如果服务器返回错误代码,回调将执行。我认为这就是您打算通过 try/catch 复制的内容。

    【讨论】:

    • 就是这样!非常感谢!
    【解决方案2】:

    如果你想在ajax回调后立即使用结果,你必须设置ajax调用的async : false属性使其同步。由于这通常不是您想要做的,您可能应该以不同的(异步)方式处理响应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      • 2014-02-18
      • 2011-02-28
      • 1970-01-01
      • 2013-06-18
      • 1970-01-01
      • 2011-11-24
      相关资源
      最近更新 更多