我试图从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
一样?
答案 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以全面了解此处的内容