0

(1. 你觉得拥有一个可以调用的全局 jQuery ajax 'helper' 有用ajax(url,data,async)吗?)

function ajax(ajax_url, ajax_data, ajax_async){
  ajax_async = typeof(ajax_async) != 'undefined' ? ajax_async : true;

  $.ajax({
    type: 'GET',
    url: ajax_url,
    data: ajax_data,
    async: ajax_async,
    dataType: 'text',
    success: function(response) {
        return response;
    },
    error: function(){

    }
  });
}

如果我正在调用一个放置 GET 并返回成功响应的函数。

alert(ajax('localhost/hello','',false);

如果我这样做,alert(get_ajax())我会收到“未定义”的警报..即使有返回值

我看到它是一个事件循环问题,但我async:false在 ajax 调用中。想法?

4

3 回答 3

3

这是被问过一百万次的问题之一,但几乎不可能搜索到。无论如何,问题是当你从这里回来时......

success: function(response) {
    return response;
}

...您不是从ajax()函数返回,而是从匿名success函数返回。要从主函数返回值,您必须将字符串保存到变量中,以便您可以从正确的函数返回。

var val = '';

$.ajax({
    //       ....
    success: function(response) {
       val = response;
    },
    //       ....
});

return val;

请注意,这仅在您进行同步调用时有效。对于异步调用,最好将回调函数作为参数并将其用作成功函数。

于 2011-11-11T08:05:20.700 回答
1

对于同步调用,我相信你会做

var data;
$.ajax({
    ...
    async: false,
    success: function(response) {
        data = response;
    }
});
return data;
于 2011-11-11T08:06:29.160 回答
0

您的ajax函数包装了$.ajax调用,不返回任何内容:这就是 the 的undefined来源。要在您的示例中获得一些价值alert,您应该在函数的底部添加一个 return 语句。

要获得响应警报,应执行以下操作:

success: function(response) {
    alert(response);
},
于 2011-11-11T08:02:03.873 回答