我正在尝试创建一个可重用的函数,我可以在其中传递arg,并基于该执行ajax调用。到目前为止,这就是我得到的:
ajaxFunc: function(url, method, args) {
return {
var URL = url,
METHOD = method,
ARGS = args,
ERROR = error,
index = -1,
ajaxResponse,
AJAX = function() {
var url = URL + ((args == null) ? '' : ('/' + ARGS )),
data = (METHOD == 'post') ? ARGS[index] : undefined,
thisObject = this;
$.ajax({
url:url,
method:METHOD,
data: data,
dataType: 'json',
error: function(jqXHR, textStatus, error) {
console.error(jqXHR, textStatus, error)
},
success: function(response) {
ajaxResponse = response;
}
});
return ajaxResponse;
};
AJAX();
};
};
我的问题是,如何让return
工作? - 当我调用该函数时,我可以看到ajax调用,但函数永远不会返回响应。
例如:如果我MAIN.util.ajaxFunc('http://url.com/', 'get', null);
我得不到任何回报。我希望找到一种可以进行ajaxFunc
调用的方法,然后检查响应,如果response.length
做了什么。
我做错了什么?
答案 0 :(得分:1)
问题是ajax是异步的。我会做这样的事情:
使用延期:
ajaxFunc: function (url, method, args) {
//...
return $.ajax({
url: url,
method: METHOD,
data: data,
dataType: 'json',
error: function (jqXHR, textStatus, error) {
console.error(jqXHR, textStatus, error)
}
});
};
MAIN.util.ajaxFunc('http://url.com/', 'get', null).done(function(response) {
});
或使用callbacK:
ajaxFunc: function (url, method, args, callback) {
//...
return $.ajax({
url: url,
method: METHOD,
data: data,
dataType: 'json',
error: function (jqXHR, textStatus, error) {
console.error(jqXHR, textStatus, error)
},
success: function (response) {
callback(response);
}
});
};
MAIN.util.ajaxFunc('http://url.com/', 'get', function(response) {
});
答案 1 :(得分:0)
使用这样的异步操作,不要返回响应。相反,将数据传递给另一个需要它的函数。从那里链接的任何函数都必须是新链的一部分,如下所示:
success: function(response) {
myFunction(response);
}
不是使用这样的回调,而是使用promises。这完成了同样的事情,但避免功能嵌套。它看起来像这样:
$.ajax({
url: url,
method: METHOD,
data: data,
dataType: 'json',
}).then(function (data) {
myFunction(data);
});