0

我想从 $.ajax 返回数据,但我不能......

 function call() {    
    var str = null;
     $.ajax({ url: '/jsonFiles/Products.json',
                    datatype: 'json',
                    success: function (data) { alert(data); str = data; },
                    error: function () { alert("error"); }
                });
    return str; }

我没有结果... 警报(数据)可以工作,然后它返回失败的str。请我想要返回JsonString的函数。

4

3 回答 3

0

您忘记了这是异步的。您的函数在调用完成call之前返回,或者有任何返回值。$.ajax您不能返回函数str中设置的内容,success因为它总是在调用call完成后执行。无论您需要对 做什么str,要么在success函数本身中执行,要么将其保存在闭包/全局范围内的某个位置,以便其他一些函数可以在其他地方使用它。

于 2013-10-04T12:38:03.963 回答
0

调用是异步的,这意味着函数将在 $.ajax 调用完成之前返回。

不建议这样做,但我认为您可以通过 async: false 作为参数来解决它,例如。

$.ajax({ url: '/jsonFiles/Products.json',
                datatype: 'json',
                async: false,
                success: function (data) { alert(data); str = data; },
                error: function () { alert("error"); }
            });

更好的解决方案是在 $.ajax 完成时使用 str 调用另一个函数

于 2013-10-04T12:46:59.897 回答
0

您可以按照 Philip G 的建议进行同步呼叫。

您还可以使用回调(首选解决方案):

function call(callback) {    
    $.ajax({ url: '/jsonFiles/Products.json',
                datatype: 'json',
                success: callback,
                error: function () { alert("error"); }
           });
}

// call call with a callback function (anonymous in this example)
call(function(data) {
    alert(data);
});
于 2013-10-04T13:11:17.447 回答