内置于此 - > js->提交cakephp运行两次

时间:2012-11-02 16:11:48

标签: jquery ajax cakephp-2.1 helpers

研究员。

我只找到this reference我的问题,这没有用。

我正在使用内置 $ this-> Js->提交

的蛋糕php

我想做什么:

我的逻辑开始的网站包含一个包含我的数据的表。在这个网站上我还有几个包含表单的元素,并由一个模态窗口打开(jquery ui对话框)

  1. 将对象插入数据库。 (工作)
  2. 我插入的表单位于模态对话框窗口中。 (工作)
  3. 提交按钮是图像。 (工作)
  4. 在提交表单之前,将启动验证(工作)
  5. 提交表单后,关闭模式并将新对象放在表的第一行(工作)
  6. 那么我的问题是什么?

    一切都会发射两次。

    **代码**

    由于我的所有其他代码似乎都在工作,我只会粘贴 $ this-> Js->提交部分代码,所以你们可以专注于似乎是问题。

    如果需要任何其他代码,请写信给我,我很乐意在编辑部分粘贴更多代码。

    echo $this->Js->submit(' ', array (
            'label' => 'Send',
            'onsubmit'=>"event.returnValue = false; return false;",
            'div'   => array('class' => 'send_button'), //style submit to be an image
            'url'   => array('controller' => 'records', 'action' => 'append_new_record'),
            'type' => 'json',
            'success' => '
                if (data.success == true) {
                    $("#element_add").dialog("close");
                    var newLine = data.recordLine;
                    $("#content").find("table tbody").find("tr:first").before(newLine);
                }
                else { 
                    $("#element_add").html(data.form);
                }
                ',
            'buffer' => false, //true did not help (refreshes the whole web site)
            'before' => '
                if (!checkAdd()) { //validation (custom js function)
                    return false;
                }
            '
        ));
    

    我尝试了什么

    1. 在“成功”代码块的末尾添加一个返回假行。
    2. 在“之前”代码块的开头添加event.preventDefault()。
    3. EDIT1这里是生成的HTML代码

          </script><div class="send_button"><input  id="submit-1182269389" type="submit" value=" "/></div><script type="text/javascript">
      
      $("#submit-1182269389").bind("click", function (event) {$.ajax({beforeSend:function (XMLHttpRequest) {
                      if (!checkAdd()) {
                          return false;
                      }
                  }, data:$("#submit-1182269389").closest("form").serialize(), dataType:"json", label:"Send", onsubmit:"event.returnValue = false; return false;", success:function (data, textStatus) {
                      if (data.success == true) {
                          $("#element_add").dialog("close");
                          var newLine = data.recordLine;
                          $("#okno").find("table tbody").find("tr:first").before(newLine);
                      }
                      else {
                          $("#element_add").html(data.form);
                      }
                      }, type:"post", url:"\/my_app\/records\/append_new_record"});
      return false;});
      
      </script></form>
      

      EDIT2 1.尝试不能工作

      <script type="text/javascript">
          $('#addForm').submit(function(event) {
              event.preventDefault();
          });
      </script>
      

      所以这会阻止整个ajax的事情(刷新页面后数据会附加到表中,但仍然是两次)

1 个答案:

答案 0 :(得分:0)

我通过一个很好的解决方法解决了这个问题,所以如果有人提供信息,为什么这样做会让我很高兴。

我的解决方案:

  • 添加了隐藏输入

    $this->Form->input('submit_type', array('id'=>'add_submit_type', 'type'=>'hidden', 'value'=>0));
    
  • 之前我添加了这段代码

    var value = $("#add_submit_type").val();
    if (value == 1) {
        $("#add_submit_type").val("0");
    } else {
        $("#add_submit_type").val("1");
    }
    
  • 在我的PHP中,如果$ this-&gt; request-&gt; data的submit_type == 0,我不允许创建对象。