【发布时间】:2016-04-24 14:33:20
【问题描述】:
How do I return the response from an asynchronous call? 没有帮助我,可能会让谷歌用户感到困惑,因为 它的状态是什么工作不工作。女巫是; the_data_you_want = 响应,这实际上就是答案。
我正在开发一个使用 Ajax、Jquery、Promise 和 PHP 的项目。
我用一个函数填充一个数组。
var data = validateInput2(field_id, data_type, value).then(function (response) {
console.log("Succès !", response); <-----------------------------
data = response; Scope where data is filled
alert('R : '+data); <-----------------------------
}, function (error) {
console.error("Échec !", error);
});
alert('DATA : '+data); <---------------------------
if (data[0] == 'true') { Outside the scope where data
$(container[1]).addClass("pass_f"); is a pending promise object
$(container[1]).html(data[2]);
$(container[0]).html(data[1]);
}
else {
$(container[1]).removeClass("pass_f");
$(container[1]).addClass("err_f");
$(container[1]).html(data[2]);
$(container[0]).html(data[1]);
}
现在,如果您查看警报声明,第一个 alert('R : '+data); 正在向我展示我应该看到的内容。从 PHP 发回的数组。
由于console.log("Succès !", response);,我可以在控制台中看到相同的好值,但是当我继续前进并到达页面应该更新的部分时。女巫是alert('DATA : '+data); 数据不再是原来的样子。相反,我在警告框中得到[object Object]。在控制台中我得到 p>
承诺{[[PromiseStatus]]:“待定”,[[PromiseValue]]:未定义}
结果中包含的数组似乎只在里面;
{
console.log("Succès !", response);
data = response;
alert('R : '+data);
}
所以我知道我的 Promise 正在工作,因为我的页面正在等待状态为 pending 的对象,并且我不再有 data undefined 错误。
【问题讨论】:
-
变量
data是一个局部变量,您正试图在其范围之外访问它 -
所以如果我将所有代码移到那里它应该可以工作吗?
-
你为什么要用
response覆盖var data? -
console.log("Succès !", response)将使用浏览器对这两个参数的特殊显示:response作为一个对象被渲染到漂亮的下拉表格中。用加号替换逗号,你会得到非常不同的东西:'DATA : '+data将调用data.toString()以便能够执行连接,并且对象的默认toString是[object Object]。console.log然后输出它给出的字符串:"R : [object Object]". Yourdata` 变量在那一刻仍然正确。接受的答案中提到的超出范围的问题是不相关的。
标签: javascript jquery arrays ajax promise