我试图创建一个ajax函数来获取每次DB的一些参数,但是当我调用ajax方法时它没有正确返回,当我这样做时调试值是正常的,但是返回的结果不是的工作原理。
$(document).ready(function () {
function foo(mod){
var uri="some url";
$.ajax({
type: "GET",
url: uri,
}).done(function( data ) {
return data;
});
}
// alert to get the result is always printing undefined
alert(foo("param_1"));
});
答案 0 :(得分:4)
foo
无法返回 ajax调用的结果,因为ajax调用是异步。 foo
在呼叫完成之前返回。此外,return
处理程序中的done
从done
处理程序返回,而不是foo
。
您需要foo
接受回拨,然后调用:
$(document).ready(function () {
function foo(mod, callback){
var uri="some url";
$.ajax({
type: "GET",
url: uri,
}).done(function( data ) {
callback(data);
});
}
// alert to get the result is always printing undefined
foo("param_1", function( data ) {
alert(data);
});
});
或者如果您在回复之前确实没有对进行处理,那么您可以直接向callback
提供done
:
$(document).ready(function () {
function foo(mod, callback){
var uri="some url";
$.ajax({
type: "GET",
url: uri,
}).done(callback);
}
// alert to get the result is always printing undefined
foo("param_1", function( data ) {
alert(data);
});
});
答案 1 :(得分:0)
您可以将async设置为false,但我建议您实现可以异步工作的成功和错误处理程序
$(document).ready(function() {
function foo(mod) {
var uri = "some url";
$.ajax({
type: "GET",
url: uri,
success: successHandler,
error: errorHandler
});
}
function successHandler(data, textStatus, xhr) {
// Handle your data here
console.log(data);
//alert(data);
}
function errorHandler(xhr, textStatus, errorThrown) {
// Magic
}
// alert to get the result is always printing undefined
//alert(foo("param_1"));
foo("param_1");
});