Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据ajax响应,在单击submit按钮时返回true/false_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 根据ajax响应,在单击submit按钮时返回true/false

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

基于我从ajax请求中收到的一些JSON,我希望允许或拒绝按提交按钮(返回true/false)

我试图实现一个承诺,但是,在收到ajax响应之前,我仍然可以看到调用了“product unavailable”

问题是否归结为表单/提交按钮?或者这仍然是可能的

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);
}

你有很多问题。最明显的一点是,您(承诺)使用它的返回值(未定义!)

你需要做的是

  • 默认情况下,阻止所有情况下的表单提交
  • 正确对待承诺并检查返回标志。如果为true,则使用domapi(表单提交方法)手动提交表单
  • 确保使用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){/您有很多问题。最明显的问题是您(承诺)使用它的返回值(未定义!)

    你需要做的是

  • 默认情况下,阻止所有情况下的表单提交
  • 正确对待承诺并检查返回的标志。如果为真,则使用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,对你也公平,先生