从Ajax调用返回值

时间:2015-10-12 22:47:27

标签: javascript jquery ajax

我试图从Ajax调用返回一个值,但无法找到正确的方法来执行此操作。这就是我现在所拥有的:

function getCount() {
  $.ajax({
        url: "php/get.php",
        type: 'get',
        dataType: 'html',
        data: { location: "", category: "10" },
        async: false,
        success: function(data) {
            result = Math.ceil(data/20);
        } 
     });
return result;
}

如您所见,我使用的async false现已折旧。有没有另外一种方法可以从函数中返回这个,就像我现在没有使用async: false一样?

1 个答案:

答案 0 :(得分:1)

此时你不能return result,因为这是一个异步调用。您可以改为承诺并解决它。请注意以下内容......

function getCount() {
    return $.ajax({
        url: 'php/get.php',
        type: 'get',
        dataType: 'html',
        data: { location: '', category: '10' },
     });
}

使用样本......

var result;

getCount().then(function(response) { // -- asynchronous
    result = Math.ceil(response / 20);
});

此外,这里可能会有一些简写语法 - jQuery.get()

function getCount() {
    return $.get('php/get.php', { location: '', category: '10' });
}

JSFiddle Link - 演示

或者,如果您希望使用Math而不是getCount()回调执行then()逻辑,则可以使用以下模式执行此操作...

function getCount() {
    var deferred = $.Deferred();

    $.get('php/get.php', { location: '', category: '10' }, function(response) {
        deferred.resolve(Math.ceil(response / 20));
    });

    return deferred.promise();
}
getCount().then(function(response) {
    console.log(response) // Math.ceil value
});

JSFiddle Link - 辅助演示

查看Deferred Object docs以全面了解此处的内容