0

我不知道为什么在成功调用 ajax 后结果数组为空。我肯定是从添加到数组中的源 url 取回数据,但返回结果语句中的结果为空。

谢谢你的帮助。

 function locationSearch(loc) {
    var result = [];
    $.ajax({
        data: 'q=description:' + loc + '*&wt=json&json.wrf=?&fl=*',
        url: 'http://deviis:8080/Locations/select/',
        aSync: false,
        success: function (data) {
            result.push({ value: "Any", data: "*" });
            $.each(data.response.docs, function (i, item) {
                result.push({ value: item.description, data: item.id });                    
            });               
        }
    });
    return result;
}
4

4 回答 4

0

你有return result;ajax函数之外的地方success,所以你不能得到结果。因为,获取服务器响应需要一些时间,但在该locationSearch()函数返回result空数组之前。

AJAX 中的 A 代表异步。

你可以试试这个:

success: function (data) {
    result.push({ value: "Any", data: "*" });
    $.each(data.response.docs, function (i, item) {
        result.push({ value: item.description, data: item.id });                    
    }); 
    console.log(result);              
 }
于 2012-05-17T16:52:59.387 回答
0

尝试在构建后立即返回数组 shomehow。

ajax 请求可能需要更长时间,并且您在请求完成之前返回空数组。

于 2012-05-17T16:54:01.830 回答
0

您可能想尝试在成功回调中执行返回工作。始终注意 javascript 编程中的闭包。

John resig 对这篇文章的回答应该会有所帮助。

于 2012-05-17T16:55:49.273 回答
0

从 jQuery 1.5 开始,您现在可以使用延迟承诺,而不是使用 'success: ' ,它允许使用诸如 .done(); 之类的函数异步处理此请求。

请参阅:http ://api.jquery.com/category/deferred-object/

此外,如果您从单独的脚本文件调用,您将希望回显结果而不是返回它。据我所知,这不是你在做什么,但它会导致同样的问题,所以把它留给其他可能会发现这个问题的人。

于 2015-02-13T08:07:19.540 回答