我正在尝试将函数返回true或false,具体取决于其中的AJAX函数的响应,但我不知道该怎么做。
(function($) {
$('#example').ajaxForm({
beforeSubmit : function(arr, $form, options) {
var jsonStuff = JSON.stringify({ stuff: 'test' });
$.post('/echo/json/', { json: jsonStuff }, function(resp) {
if (resp.stuff !== $('#test').val()) {
// Cancel form submittion
alert('Need to type "test"');
return false; // This doesn't work
}
}, 'json');
},
success : function() {
alert('Form sent!');
}
});
})(jQuery);
我做了一个小提琴来更好地说明这一点:
http://jsfiddle.net/vengiss/3W5qe/
我正在使用jQuery和Malsup的Ajax Form插件,但我相信这种行为与插件无关,我只需要return false
beforeSubmit
函数,具体取决于POST
请求,以便每次都不提交表单。有人能指出我正确的方向吗?
提前致谢!
答案 0 :(得分:6)
处理异步函数时无法做到这一点。调用post
的函数将立即返回,而ajax回调将在将来的某个时刻返回。现在无法返回未来的结果。
相反,您需要做的是将回调传递给原始函数。最终将使用ajax调用的结果调用此函数
var makePostCall = function(callback) {
$.post('/echo/json/', { json: jsonStuff }, function(resp) {
if (resp.stuff !== $('#test').val()) {
// Cancel form submittion
alert('Need to type "test"');
callback(false);
} else {
callback(true);
}}, 'json');
};
然后将期望从makePostCall
得到快速响应的代码切换为使用回调。
// Synchronous version
if (makePostCall()) {
// True code
} else {
// false code
}
// Async version
makePostCall(function (result) {
if (result) {
// True code
} else {
// False code
}
});
答案 1 :(得分:0)
您可以将async:false参数放入ajax请求,然后您可以控制将来的响应并将结果发送回父级。见***中包含的以下主线 add:function(e,data){
//before upload file check server has that file already uploaded
***var flag=false;***
$.ajax(
{
type: "POST",
dataType:'json',
url:"xyz.jsp",
***async:false,***
data:{
filename : upload_filename,
docname : upload_docname,
userid : upload_userid,
},
success:function(data)
{
***flag=true;***
},
error:function(request,errorType,errorMessage)
{
alert ('error - '+errorType+'with message - '+errorMessage);
}
});
***return flag;***
}