Javascript 根据ajax响应,在单击submit按钮时返回true/false
基于我从ajax请求中收到的一些JSON,我希望允许或拒绝按提交按钮(返回true/false) 我试图实现一个承诺,但是,在收到ajax响应之前,我仍然可以看到调用了“product unavailable” 问题是否归结为表单/提交按钮?或者这仍然是可能的Javascript 根据ajax响应,在单击submit按钮时返回true/false,javascript,jquery,ajax,Javascript,Jquery,Ajax,基于我从ajax请求中收到的一些JSON,我希望允许或拒绝按提交按钮(返回true/false) 我试图实现一个承诺,但是,在收到ajax响应之前,我仍然可以看到调用了“product unavailable” 问题是否归结为表单/提交按钮?或者这仍然是可能的 var oAH = { ValidateSubmit : function(self){ // send request to handler $.ajax({ type
var oAH = {
ValidateSubmit : function(self){
// send request to handler
$.ajax({
type: "POST",
url: "",
data: aData,
cache: false})
.done(function(data) {
var oJSON = JSON.parse(data);
if(oJSON.Status === 1){
// return true to allow form to submit
return true;
}else{
console.log('product unavailable (error message)');
return false;
}
})
}
}
// click handler
$('#submitButton').on('click', function(){
return oAH.ValidateSubmit(this);
}
你有很多问题。最明显的一点是,您(承诺)使用它的返回值(未定义!) 你需要做的是
var oAH = {
ValidateSubmit: function(self) {
// send request to handler
return $.ajax({
type: "POST",
url: "",
data: aData,
cache: false
})
.then(function(data) { // <----- make sure you use .then
return data.Status === 1;
});
}
}
// form onsubmit handler, form has id form for example, etc.
$('#form').on('submit', function(e) {
var form = this;
e.preventDefault()
return oAH.ValidateSubmit(this)
.then(function(canSubmit) {
if (canSubmit) {
form.submit();
}
});
});
var oAH = {
ValidateSubmit : function(self){
// send request to handler
$.ajax({
type: "POST",
url: "",
data: aData,
cache: false})
.done(function(data) {
var oJSON = JSON.parse(data);
if(oJSON.Status === 1){
// return true to allow form to submit
submitForm();
}else{
console.log('product unavailable (error message)');
}
})
}
}
function submitForm() {
$('#myForm').submit();
$('#submitButton').removeAttr('disabled');
}
// click handler
$('#submitButton').on('click', function(e){
//prevent submitting
e.preventDefault();
// Disable, you could show a loading animation/gif
$(this).attr('disabled','disabled');
// call ajax
oAH.ValidateSubmit(this);
}
var-oAH={
ValidateSubmit:函数(自身){
//向处理程序发送请求
返回$.ajax({
类型:“POST”,
url:“”,
数据来源:aData,
缓存:false
})
.then(function(data){/您有很多问题。最明显的问题是您(承诺)使用它的返回值(未定义!)
你需要做的是
默认情况下,阻止所有情况下的表单提交
正确对待承诺并检查返回的标志。如果为真,则使用DOM API(表单提交方法)手动提交表单
确保使用onsubmit事件而不是按钮onclick
总的来说,它看起来像这样:
var oAH = {
ValidateSubmit: function(self) {
// send request to handler
return $.ajax({
type: "POST",
url: "",
data: aData,
cache: false
})
.then(function(data) { // <----- make sure you use .then
return data.Status === 1;
});
}
}
// form onsubmit handler, form has id form for example, etc.
$('#form').on('submit', function(e) {
var form = this;
e.preventDefault()
return oAH.ValidateSubmit(this)
.then(function(canSubmit) {
if (canSubmit) {
form.submit();
}
});
});
var oAH = {
ValidateSubmit : function(self){
// send request to handler
$.ajax({
type: "POST",
url: "",
data: aData,
cache: false})
.done(function(data) {
var oJSON = JSON.parse(data);
if(oJSON.Status === 1){
// return true to allow form to submit
submitForm();
}else{
console.log('product unavailable (error message)');
}
})
}
}
function submitForm() {
$('#myForm').submit();
$('#submitButton').removeAttr('disabled');
}
// click handler
$('#submitButton').on('click', function(e){
//prevent submitting
e.preventDefault();
// Disable, you could show a loading animation/gif
$(this).attr('disabled','disabled');
// call ajax
oAH.ValidateSubmit(this);
}
var-oAH={
ValidateSubmit:函数(自身){
//向处理程序发送请求
返回$.ajax({
类型:“POST”,
url:“”,
数据来源:aData,
缓存:false
})
.then(function(data){//我认为您尝试做的是不可能的。此时必须处理UI事件,并且ajax请求是异步的。
您可以在单击时阻止表单提交,禁用按钮并等待ajax返回值,然后在回调中提交表单或不提交表单,如下所示:
var oAH = {
ValidateSubmit: function(self) {
// send request to handler
return $.ajax({
type: "POST",
url: "",
data: aData,
cache: false
})
.then(function(data) { // <----- make sure you use .then
return data.Status === 1;
});
}
}
// form onsubmit handler, form has id form for example, etc.
$('#form').on('submit', function(e) {
var form = this;
e.preventDefault()
return oAH.ValidateSubmit(this)
.then(function(canSubmit) {
if (canSubmit) {
form.submit();
}
});
});
var oAH = {
ValidateSubmit : function(self){
// send request to handler
$.ajax({
type: "POST",
url: "",
data: aData,
cache: false})
.done(function(data) {
var oJSON = JSON.parse(data);
if(oJSON.Status === 1){
// return true to allow form to submit
submitForm();
}else{
console.log('product unavailable (error message)');
}
})
}
}
function submitForm() {
$('#myForm').submit();
$('#submitButton').removeAttr('disabled');
}
// click handler
$('#submitButton').on('click', function(e){
//prevent submitting
e.preventDefault();
// Disable, you could show a loading animation/gif
$(this).attr('disabled','disabled');
// call ajax
oAH.ValidateSubmit(this);
}
我认为您尝试做的是不可能的。此时必须处理UI事件,并且ajax请求是异步的。
您可以在单击时阻止表单提交,禁用按钮并等待ajax返回值,然后在回调中提交表单或不提交表单,如下所示:
var oAH = {
ValidateSubmit: function(self) {
// send request to handler
return $.ajax({
type: "POST",
url: "",
data: aData,
cache: false
})
.then(function(data) { // <----- make sure you use .then
return data.Status === 1;
});
}
}
// form onsubmit handler, form has id form for example, etc.
$('#form').on('submit', function(e) {
var form = this;
e.preventDefault()
return oAH.ValidateSubmit(this)
.then(function(canSubmit) {
if (canSubmit) {
form.submit();
}
});
});
var oAH = {
ValidateSubmit : function(self){
// send request to handler
$.ajax({
type: "POST",
url: "",
data: aData,
cache: false})
.done(function(data) {
var oJSON = JSON.parse(data);
if(oJSON.Status === 1){
// return true to allow form to submit
submitForm();
}else{
console.log('product unavailable (error message)');
}
})
}
}
function submitForm() {
$('#myForm').submit();
$('#submitButton').removeAttr('disabled');
}
// click handler
$('#submitButton').on('click', function(e){
//prevent submitting
e.preventDefault();
// Disable, you could show a loading animation/gif
$(this).attr('disabled','disabled');
// call ajax
oAH.ValidateSubmit(this);
}
'product unavailable'
不应该是对您的Status==1
检查的语句吗?是的,它应该,现在将更新我的答案。但不幸的是,这不是ajax的异步性质导致的问题,validaesubmit函数应该在ajax请求完成之前已经返回了。也返回了从另一个函数中定义的函数开始对另一个函数没有影响。您的按钮类型是什么?是提交
还是按钮
?它是提交按钮。感谢musa,我实际上是在设置var和returnign,而不是在承诺内。我没想到在这里简化代码时,它会是一个问题,不是'product unavailable'
是否是对您的状态===1
检查的语句?是的,它应该会立即更新我的答案。但不幸的是,这不是ajax的异步性质导致的问题,validaesubmit函数在ajax请求完成之前就已经返回了。也是从f返回的在另一个函数中定义的函数对另一个函数没有影响。你的按钮是什么类型的?它是提交
还是按钮
?它是一个提交按钮。感谢穆萨,我实际上设置了一个var并返回,而不是在承诺内。我没想到在这里简化代码时,会出现问题,所以你不需要d解析响应,如果是JSON,jquery将为您解析。返回oJSON。Status==1;
是您需要返回的全部内容。您就是那个人!非常感谢dfsq,正是我需要的:)想知道为什么会有否决票…很高兴它起到了作用!是的,不幸的是,人们滥用否决票按钮,即使是合法的问题。干杯!你也不需要解析响应,如果是JSON,jquery将为你解析它。return oJSON.Status==1;
是你需要返回的全部。你就是那个人!非常感谢dfsq,正是我需要的:)想知道为什么会有否决票…很高兴它起到了作用!是的,不幸的是,人们滥用否决票按钮,即使是在合法的问题上。干杯!事实上,两人都这么做,但他的解决方案都使用承诺。我喜欢它,使用承诺的好例子。我明白了,对你来说也是公平的。实际上,两人都这么做,但他的解决方案使用承诺。我喜欢它,很好的例子我明白了,我要用promisesah,对你也公平,先生