我编写了一个函数,用于在发布表单以将数据发布到URL时使用。但是我不确定如何在函数中返回结果,以便我可以检查函数何时被调用,响应是什么。
基本上我希望返回函数中的response
值,以便我可以访问它。
/**
* Submit (POST) the Form via Ajax
*
* @param form
* @param action
* @param data
* @param container
*/
function postForm(form,action,method,container){
$.ajax({
type: 'post',
dataType: 'json',
url: action,
data: form.serialize(),
error: function(xhr, status, error) {
// Display errors
var err = JSON.parse(xhr.responseText);
var errMsg = '';
$.each(err, function(name, val) {
errMsg += val + '<br>';
});
new PNotify({
title: "Error!",
text: errMsg,
type: 'error',
animate_speed: 'fast'
});
},
success: function (response) {
handleResponse(method, container, response);
return response;
}
});
}
我想这样用:
var result = postForm(
form,
form.attr('action'),
form.attr('data-method'),
$(form.attr('data-container'))
);
alert(result);
目前,var result
输出undefined
。
请帮忙!
答案 0 :(得分:1)
你的函数应该返回一个promise对象:
function postForm(form,action,method,container){
var promise = $.ajax({
type: 'post',
dataType: 'json',
url: action,
data: form.serialize(),
error: function(xhr, status, error) {
// Display errors
var err = JSON.parse(xhr.responseText);
var errMsg = '';
$.each(err, function(name, val) {
errMsg += val + '<br>';
});
new PNotify({
title: "Error!",
text: errMsg,
type: 'error',
animate_speed: 'fast'
});
},
success: function (response) {
handleResponse(method, container, response);
return response;
}
});
return promise;
}
现在您的调用者将引用ajax请求的承诺。 所以现在你做了:
var promise = PostForm(...);
promise.done(function(data) {
do your thing
})
您应该阅读:How do I return the response from an asynchronous call?
答案 1 :(得分:0)
你可以处理这样的情况:
success: function (response) {
handleResponse(method, container, response);
//return response;
doSomething(response);
}
然后:
function doSomething(response) {
alert(response);
}
也许你想通过指定:
来进行呼叫同步(不建议)$.ajax({
type: 'post',
dataType: 'json',
url: action,
async: false
...