问题 如何检索jquery $ .ajax对象的responseJSON属性[重复]


这个问题在这里已有答案:


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