ยื่นฟอร์มอาแจ็กซ์ แบบฟอร์มที่ส่งสองครั้ง

ฉันกำลังทำงานกับ cakePHP และในความคิดของฉัน ฉันมีแบบฟอร์มที่มีปุ่มส่ง ajax ฉันเรนเดอร์มันโดยใช้ตัวช่วยเค้ก

    <form method="post" class="form-class" id="form-id" name="form1" style="display: none">
                *[content for the form]*
                    <?php
                    echo $ajax->submit('Ok',
                            array(
                                       'id'=> 'submit1',
                                        'url'=> array('controller'=>'c','action'=>'action1'),
                                        'complete'=> 'jsfunction()'

                                ));
                    echo $form->button('Submit',array('id'=>'cancel','value'=>'Cancel','onClick'=>'clickCancel()'));
                    ?>


</form>

เมื่อฉันคลิกส่ง การทำงานของคอนโทรลเลอร์จะถูกเรียกสองครั้ง ฉันค้นหา stackOverlow หากมีคำถามนี้อยู่ แต่ไม่พบวิธีแก้ไขที่ถูกต้อง ไม่มีข้อผิดพลาดทางไวยากรณ์

ความช่วยเหลือจะได้รับการชื่นชมจริงๆ ขอบคุณ.


person cowboybebop    schedule 28.01.2011    source แหล่งที่มา
comment
คุณได้ตรวจสอบในเบราว์เซอร์อื่นแล้วหรือยัง???   -  person RSK    schedule 28.01.2011
comment
คุณสามารถแสดงโค้ดใดๆ จากเพจที่สร้างขึ้นได้หรือไม่? (ฉันเดาได้แค่ว่า $ajax-›submit() กำลังทำอะไรอยู่ คงจะดีถ้าได้เห็นโค้ด JS ที่ดูเหมือนว่าจะสร้างโดยอัตโนมัติสำหรับคุณที่ฝั่งไคลเอ็นต์)   -  person Brad Christie    schedule 30.01.2011
comment
ฉันรู้ว่านี่ไม่ได้ช่วยอะไร แต่ฉันประสบปัญหาเดียวกันเอง ฉันหวังเป็นอย่างยิ่งว่าจะมีคนสามารถช่วยเรื่องนี้ได้   -  person    schedule 31.01.2011
comment
อย่างที่ฉันพูดกับ OP คุณช่วยโพสต์โค้ดที่สร้างขึ้นในที่ใดที่หนึ่งได้ไหมเพื่อให้เราเห็นว่า JS ใดที่ถูกนำไปใช้กับเพจ   -  person Brad Christie    schedule 31.01.2011


คำตอบ (2)


ดูเหมือนว่าตัวจัดการเหตุการณ์ ajax ไม่ได้บล็อกพฤติกรรมเริ่มต้น ลองตั้งค่าพฤติกรรมการส่งแบบฟอร์มแบบอินไลน์เพื่อป้องกัน (เช่นเดียวกับที่ผู้ช่วยของเค้กทำ):

<form onsubmit="event.returnValue = false; return false;" method="post" class="form-class" id="form-id" name="form1" style="display: none">

ฉันขอแนะนำให้ตรวจสอบ FormHelper เพื่อดูทางลัดที่เป็นประโยชน์เกี่ยวกับเรื่องนี้

person Robin    schedule 31.01.2011

นี่คือรหัสที่สร้างขึ้นอัตโนมัติ:

 $("#submit1367508668").bind('click', function(){ 
     $.ajax({
              async:true, 
              type:'post', 
              complete:function(request, json) {
                   getServerResponse(request)
              }, 
              url:'/recipients/add', 
              dataType:'json', 
              data:$(this).parents('form:first').serialize()}); 
              blockUI(); 
     })
person Christopher    schedule 30.01.2011
comment
จริงๆ แล้วฉันใช้ FormHelper ร่วมกับตัวช่วย Ajax เพื่อสร้างเอาต์พุตโค้ด และฉันแก้ไขตัวเลือกเพื่อรวม event.returnValue = บิตเท็จของมัน เนื่องจากเป็นสิ่งเดียวที่ขาดหายไป แต่ก็ยังไม่ไป - person Christopher; 02.02.2011