我有一个在表单提交后运行的代码。它是基于AJAX的请求。
我遇到的问题是FormSubmit
函数Validation.done(function(){
我收到错误消息说未捕获TypeError:Validation.done不是函数。但如果你查看FormValidate
函数,它会返回deferredObject.promise
在ajax完成或失败时解决或拒绝。
那么问题在哪里?
当用户提交表单时,我们会执行操作:
$(document).ready(function() {
$("#NewOrder").submit(function (e){
e.preventDefault();
FormSubmit("NewOrder");
return false;
});
});
function FormSubmit(FormId)
{
var Validation = FormValidate(FormId);
Validation.done(function(){
//Do stuff if validation succeeded
});
}
FormValidate
功能:
function FormValidate(FormId)
{
var deferredObject = $.Deferred();
var url = "../../ajax/FormValidate";
var data = {};
var promise = AjaxRequest(url, data);
promise.done(function(response) {
var resultArray = JSON.parse(response);
var FormEntity = $('#'+FormId).attr('entity');
if($.isEmptyObject(resultArray)){
deferredObject.resolve();
}
else{
$.each(resultArray, function( key, value ) {
$( "div#"+key+"_validation" ).text(value);
});
deferredObject.reject();
}
});
promise.fail(function(response) {
deferredObject.reject();
console.log(response);
});
return deferredObject.promise;
}
AjaxRequest
功能:
function AjaxRequest(url, data)
{
var deferredObject = $.Deferred();
var request = $.ajax({
url: url,
type: "POST",
data: data,
});
request.done(function (response){
deferredObject.resolve(response);
});
request.fail(function (response){
deferredObject.reject(response);
});
return deferredObject.promise();
}
答案 0 :(得分:2)
deferredObject.promise
是一个功能。你需要打电话来获得承诺。
return deferredObject.promise();
答案 1 :(得分:0)
您正在大量使用deferred antipattern。在给定的解决/拒绝承诺上显式构建延迟并使用.done
和.fail
处理程序,而不是使用.then
方法:
function FormValidate(FormId) {
var url = "../../ajax/FormValidate";
var data = {};
return AjaxRequest(url, data).then(function(response) {
var resultArray = JSON.parse(response);
var FormEntity = $('#'+FormId).attr('entity');
if ($.isEmptyObject(resultArray)) return; // resolve with undefined
$.each(resultArray, function(key, value) {
$("div#"+key+"_validation").text(value);
});
return $.Deferred().reject(resultArray); // if not empty
}, console.log.bind(console));
}
function AjaxRequest(url, data) {
return $.ajax({
url: url,
type: "POST",
data: data,
});
}
然后,那些.promise()
来电的错字也不会发生: - )