$(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({})服务器获得了成功的回复;”有任何想法吗?
答案 0 :(得分:2)
我会想象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复制的。
答案 1 :(得分:1)
如果要在进行ajax回调后立即使用结果,则必须设置ajax调用的async : false
属性以使其同步。由于这通常不是您想要做的,您应该以不同的(异步)方式处理响应。