1

我有一个奇怪的(可能不是我敢打赌的)问题,我有一个 JavaScript 方法来调用我所有的 ajax 调用,请参见下文。

function ajaxCall(url, params) {
if (params === null) {
    $.ajax({
        type: 'POST',
        url: url,
        contentType: 'application/json; charset=utf-8',
        dataType: 'json'
    }).success(function(response) {
        return response;
    }).error(function(response) {
        return response;
    });
} else {
    var data = JSON.stringify(params);
    $.ajax({
        type: 'POST',
        url: url,
        data: data,
        contentType: 'application/json; charset=utf-8',
        dataType: 'json'
    }).success(function(response) {
        return response;
    }).error(function(response) {
        return response;
    });
  }
}

当我调用此方法时,我从 AJAX 调用中得到了适当的响应,一切看起来都很美好,直到我返回响应,调用返回未定义?

为了完整起见,我将包括我的调用代码。

var call = ajaxCall(someUrl, someParams);

只是为了澄清并确保我的杂乱无章被理解调用在上面的例子中是未定义的?

4

2 回答 2

1

ajax 调用async本质上是返回任何东西。所以当你做这样的事情时

var call = ajaxCall(someUrl, someParams);

然后将请求发送到服务器并开始执行下一行。不将值放入调用变量中;

也有这样的代码

.success(function(response) {
        return response;

当响应成功时, .success() 将执行一个函数,或者更确切地说是一个回调来执行,所以如果你在 this 中返回一些东西并将async标志放在$.ajax() optionsto中,它将什么都不做true。然后也nothing/undefined将被退回。

于 2012-05-01T09:02:25.743 回答
1

你不能这样做,因为 ajax 调用是异步的,
$.ajax 返回一个延迟对象,你可以使用它来获取你需要 在这里阅读的内容

于 2012-05-01T09:02:49.157 回答