这是我的代码示例
var formValidate = function() {
var url = 'someurl';
var checkC = function (url, callback) {
$.get(url, function( data ) {
if(data.indexOf('OK') == 0) return callback('OK');
})
};
checkC(url, function(data) {
if(data == 'OK') return false;
});
return true;
}
在这个问题Wait for jQuery $.get function to finish before running code中,我的代码非常类似于Adam Rackis。但不幸的是功能不等待数据返回。 formValidate()只返回true。我希望在从表单
向服务器发送数据之前使用此函数来检查某些条件form.on('submit', function(){
if(formValidate()) form_send();
})
有人可以告诉我上面的代码在哪里错了吗?
答案 0 :(得分:1)
第一个问题是formValidate()
无论ajax请求如何都会同步返回true
。
var formValidate = function() {
.
.
.
return true;
}
如果您希望等待从回调函数返回您的值。在这里,您应该从成功回调中调用form_send()
,使其等待异步调用。而且,如果没有checkC()
,你实际上可以更简单。稍微更改代码并使用done和fail promises:
var formValidate = function () {
var url = 'someurl';
$.get(url)
.done(function (data) {
if (data.indexOf('OK') == -1) {
console.log("error");
return;
}
form_send();
})
.fail(function () {
console.log("error");
return;
})
}
答案 1 :(得分:1)
你不能这样做,因为$ .get是异步调用的。
var formValidate = function() {
var url = 'someurl';
var checkC = function (url, callback) {
$.get(url, function( data ) {
if(data.indexOf('OK') == 0) return callback('OK');
});
};
checkC(url, function(data) {
// this return to this enclosing callback function but not formValidate
if(data == 'OK') return false;
});
//this is the only return statement for formValidate function
return true;
}
我建议的解决方法是在回调中调用你的form_send(),例如,
form.on('submit', formValidate);
对于你的formValidate,
var formValidate = function () {
var url = "someurl";
$.get(url, function( data ) {
if(data.indexOf('OK') == 0) {
form_send();
}
});
};