Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript ajax函数设置为Synchronus-返回空对象_Javascript_Jquery_Ajax - Fatal编程技术网

JavaScript ajax函数设置为Synchronus-返回空对象

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:

我做了一些研究,但找不到一个适合这种情况的例子。以下是我的javascript代码:

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代码),并且您必须使所有使用此函数的代码都是异步的

自从这个问题出现以来,人们有很多想法,例如承诺和新的ES6
wait/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”代码似乎有道理,但我不确定为什么这个方法不起作用。第二个警报()未触发。我试图在其中添加另一个带有空字符串的警报,但它也没有触发。谢谢你的解释。