jquery $ .ajax调用成功,但不返回任何内容。 (jsonp)

问题描述:

$(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调用没有返回任何内容。我检查了萤火虫'净'选项卡,并确实从服务器“jsonp1272724228884({})”得到了成功的响应;“有任何想法吗?

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

我认为alert(json);显示为undefined,因为它在接收到响应之前运行。

请记住,'ajax'是'异步',因此在您的值有机会分配一个值之前,警报将继续并执行。

此外,即使它确实起作用,您的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复制的东西。

+0

就是这样!非常感谢! – Shawn 2010-05-01 15:10:43