我目前正在处理重构我的代码,并尝试按如下方式自动执行AJAX请求:
目标是使用与上下文无关的函数来启动AJAX请求。收集的数据根据上下文进行不同的处理。
这是我的功能:
function ajaxParameter(routeName, method, array, callback){
//Ajax request on silex route
var URL = routeName;
$.ajax({
type: method,
url: URL,
beforeSend: function(){
DOM.spinner.fadeIn('fast');
},
})
.done(function(response) {
DOM.spinner.fadeOut('fast');
callback(response);
})
.fail(function(error){
var response = [];
response.status = 0;
response.message = "Request failed, error : "+error;
callback(response);
})
}
我的问题主要来自于我的回调函数没有定义。 我想这样调用函数(例子)
ajaxParameter(URL_base, 'POST', dataBase, function(response){
if(response.status == 1 ){
console.log('Request succeeded');
}
showMessage(response);
});
我想过将响应返回给变量并稍后处理它,但如果请求失败或速度很慢,这将无法正常工作(因为响应不会被设置)。
该版本可让我受益.done()
和.fail()
。
编辑:所以没有错,我改变了我的代码。目标是能够处理.done()
和.fail()
上下文中使用的回调函数(虽然两个单独的函数也适用)。
答案 0 :(得分:0)
你的意思是这样的,传递成功和失败的回调:
function ajaxParameter(routeName, method, array, success, failure) {
//Ajax request on silex route
var URL = routeName;
$.ajax({
type: method,
url: URL,
beforeSend: function () {
DOM.spinner.fadeIn('fast');
}
}).done(function (response) {
DOM.spinner.fadeOut('fast');
success(response);
}).fail(function (error) {
var response = [];
response.status = 0;
response.message = "Request failed, error : " + error;
failure(response);
})
}
叫做:
ajaxParameter(
URL_base,
'POST',
dataBase,
function(response){
//success function
},
function(response){
// fail function
}
);
答案 1 :(得分:0)
据我所知,您的脚本确实没有问题。我已经在这里加了一点,但它基本上就是你以前所拥有的:
function ajaxParameter (url, method, data, callback) {
$.ajax({
type: method,
url: url,
data: data,
beforeSend: function(){
DOM.spinner.fadeIn('fast');
}
})
.done( function (response) {
DOM.spinner.fadeOut('fast');
if (callback)
callback(response);
})
.fail( function (error){
var response = [];
response.status = 0;
response.message = "Request failed, error : " + error;
if (callback)
callback(response);
});
}
现在让我们去测试它here on JSFiddle。
正如您所看到的(使用JSFiddle AJAX API),它可以正常工作。所以问题可能在你的脚本中有其他东西。您确定您在此处发布的脚本与您在开发环境中使用的脚本相同吗?
关于你的错误;绝对确保您以正确的顺序将正确的参数传递给ajaxParameter
函数。这是我在fiddle中传递的内容: