这个问题在这里已有答案:
- 如何从异步调用返回响应? 33个答案
12689
2018-05-15 14:29
起源
是否有一个特定的原因需要它,而不是提供给它的东西 success handler(无论如何都是responseJSON) - Rory McCrossan
在ajax调用(异步)完成之前,这将是未定义/空的。此时您可以通过success方法访问它。 - Gabriele Petrioli
如何从成功回调中获取响应数据? - red888
@ user1028270:你不能。 AJAX是 异步。您只能访问回调中的数据。你能做的就是用 .done() 添加另一个回调,以便您可以访问JSON $ajax.done(function(data){ console.log(data); });。 - Rocket Hazmat
请查看我的答案 - 如果你设置,你可以 async 假的,从那里去;-) - Stan Smulders
答案:
嗯,当然它是未定义的,因为在你跑的那一刻 console
在代码的最后几行,响应尚未来自服务器。
$.ajax
返回promise,您可以使用它来附加 done()
和 fail()
回调,您可以在其中使用您看到的所有属性。你实际上已经使用了回调 error
和 success
,这就是您可以运行依赖于响应中的数据的代码和其他功能的地方。
14
2017-09-25 10:49
您可以使用此技巧来获取响应:
jQuery.when(
jQuery.getJSON('DBConnect.php')
).done( function(json) {
console.log(json);
});
现在已经很晚了,但希望能帮到别人。
4
2017-12-17 12:06
响应,是“数据”,成功...所以你可以访问成功的内部写入数据[0],数据[1]。
例如:
success: function(data) {
alert(data[0]);
},
如果你想要这个响应,那么你可以在外面设置一个变量,并尝试这个:
success: function(data) {
myVar = data;
},
希望,这个帮助。
0
2018-05-15 14:43
是的,但是如何从成功回调中获得它?我想在我的脚本中使用另一个位置的数据。 - red888
您好,在ajax函数之外设置一个变量,并在成功时将数据值设置为此变量,这样您就可以在另一个位置使用此数据。 - Ferchi
对于那些不介意它是否同步的人,就像我一样,你可以这样做:
$('#submit').click(function (event) {
event.preventDefault();
var data = $.ajax({
type: 'POST',
url: '/form',
async: false,
dataType: "json",
data: $(form).serialize(),
success: function (data) {
return data;
},
error: function (xhr, type, exception) {
// Do your thing
}
});
if(data.status === 200)
{
$('#container').html(data.responseJSON.the_key_you_want);
}
});
它遍历运动,等待Ajax调用的响应,然后如果状态== 200,则在之后处理它 error
如果某事触发了错误,则起作用
编辑选项以符合您的情况。快乐编码:)
-2
2017-12-13 20:08
同步解决方案几乎总是错误的。 - HumbleWebDev
是的,在这里对大多数用例使用同步解决方案是不好的做法。但+1是唯一提供完整工作示例答案的人。我认为有时看到同步示例如何清晰地工作是有价值的。 - thclark