JavaScript ajax函数设置为Synchronus-返回空对象
我做了一些研究,但找不到一个适合这种情况的例子。以下是我的javascript代码:JavaScript ajax函数设置为Synchronus-返回空对象,javascript,jquery,ajax,Javascript,Jquery,Ajax,我做了一些研究,但找不到一个适合这种情况的例子。以下是我的javascript代码: function obtainChartData(chart) { "use strict"; $.ajax({ url: 'server/ExtractTelemetry.php', type: "POST", async: false, data: JSON.stringify(chart), success:
function obtainChartData(chart) {
"use strict";
$.ajax({
url: 'server/ExtractTelemetry.php',
type: "POST",
async: false,
data: JSON.stringify(chart),
success: function (data) {
var x = jQuery.parseJSON(data);
alert(typeof x); //SHOWS AS "object"
return x;
}
});
}
然后这个函数接收它:
$("#loadChart").click(function () {
...
data = obtainChartData(newChart);
alert(typeof data); //SHOWS AS "undefined"
...
});
如果ajax调用被设置为async,那么我就会理解为什么会发生这种情况,但是在这种情况下,直到函数返回,才会分配“data”。那么为什么它显示为未定义?从成功调用回调函数
success: function (data) {
var x = jQuery.parseJSON(data);
alert(typeof x); //SHOWS AS "object"
return resFun(x);
}
function resFun(data){
alert(typeof data);// Now you get the object
}
没有同步AJAX调用(AJAX代表“异步JavaScript和XML”) jQuery只会忽略
success
函数的返回值
您刚刚发现了每个使用javascript的人都有过的一个非常基本的问题——在您的应用程序中的某个地方会有异步代码(如AJAX代码),并且您必须使所有使用此函数的代码都是异步的
自从这个问题出现以来,人们有很多想法,例如承诺和新的ES6wait/async
关键字。为了保持简单,现在,您可以将回调传递给obtainChartData
,并让其处理结果:
function obtainChartData(chart, callback) {
"use strict";
$.ajax({
url: 'server/ExtractTelemetry.php',
type: "POST",
async: false,
data: JSON.stringify(chart),
success: function (data) {
var x = jQuery.parseJSON(data);
alert(typeof x); //SHOWS AS "object"
callback(x); // instead of return!
}
});
}
$("#loadChart").click(function () {
...
obtainChartData(newChart, function (data) {
alert(typeof data);
});
...
});
您使用的是哪个版本的jQuery?@unixarmy“jQuery-1.11.3.min”代码似乎有道理,但我不确定为什么这个方法不起作用。第二个警报()未触发。我试图在其中添加另一个带有空字符串的警报,但它也没有触发。谢谢你的解释。