1

因此,我发布了对仅返回字符串的方法的调用,并且我的发布请求在 responseText 字段中返回带有字符串的对象,但d.responseText返回“未定义”。有谁知道为什么?我以为是因为它是 AJAX 但为什么 var d 具有正确的值?

var d = $.post("/home/status_update", function(data) {return data});
console.log(d);
console.log(d.responseText);
4

2 回答 2

5

$.post返回一个 promise 对象,尝试使用它。

var d = $.post("/home/status_update");
d.done(function(data) {
    console.log(data);
});
于 2012-06-21T20:26:36.783 回答
4

这是我在 AJAX 请求中发现的最常见的错误之一:许多人没有意识到 AJAX 是 *A* 同步的,你不能指望你的d变量会被重视,因为代码会继续执行而不管完成 AJAX 请求。

只有在请求-响应往返完成后,您才能使用检索到的值。

您需要做的是实际使用内部的返回值function(data),因为您保证它只会在实际检索到该值之后执行。

另一个用户通过绑定事件获得相同的东西,该done事件在 AJAX 请求/响应完成时触发。这是以稍微不同的方式编码的同一件事。简写是:

var d = $.post("/home/status_update", function(data) {console.log(data);});

请记住,作为一个通用的应用程序架构,对于 AJAX 请求,您不能期望使用单个函数,您将定义在每次 AJAX 完成时操纵您的响应的函数。尝试以更“碎片化”的方式思考您的应用程序。

于 2012-06-21T20:40:54.827 回答