Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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
为什么jQueryAjax请求在初始请求之后中断?_Jquery_Ajax_Cakephp - Fatal编程技术网

为什么jQueryAjax请求在初始请求之后中断?

为什么jQueryAjax请求在初始请求之后中断?,jquery,ajax,cakephp,Jquery,Ajax,Cakephp,我有以下cakephp格式: <div class="quickcontactDisplay"> <?php echo $form->create('Enquiry',array('action'=>'add','class'=>'quickcontact')); echo $form->hidden('visitor_id', array('value' => $visitor)); echo $form-&

我有以下cakephp格式:

<div class="quickcontactDisplay">
<?php
    echo $form->create('Enquiry',array('action'=>'add','class'=>'quickcontact'));
    echo $form->hidden('visitor_id', array('value' => $visitor));       
    echo $form->input('name');
    echo $form->input('emailAddress',array('size' => 30));
    echo $form->input('enquiry');
    echo $form->end('Ok, I\'m done'); 
?>
</div>
Inquiries控制器的实际操作在这一点上并没有做很多工作,除了抛出我的模型中设置的内置验证消息。 下面是代码:

function add() {
        $this->set('visitor', $this->Session->read("visitor"));
        if (!empty($this->data)) 
            {
                $this->Enquiry->create();
                if ($this->Enquiry->save($this->data)) 
                {
                    //echo 'success';
                    $this->layout = 'ajax';
                } 
                else 
                {
                    //echo 'fail';
                    $this->layout = 'ajax';
                }
            }
    }
我的问题:

当我提交表单时,它会用错误消息更新我的div,一切看起来都很好。但是,当我再次提交它时,它不会触发ajax调用,而是直接提交给动作,结果是页面只包含动作输出html

以下是操作返回的内容:只有空表单和验证消息: (我想是时候放个垃圾桶了,因为它有点啰嗦了)


当.quickcontactDisplay div中包含的表单通过ajax更新时,它似乎打破了ajax绑定,不再启动。有人能看到这里发生了什么吗?谢谢。

你说得对。通过将div替换为其中的表单,所有绑定到旧内容的处理程序都将丢失

看看jQuery新的live()函数,它将当前的和未来的匹配项绑定到一个事件

或者,只要在将新HTML插入DOM后重新应用绑定即可。乙二醇

$(document).ready(function(){                                              

    function handleStuff(html)
    {
        //updates the .quickcontactDisplay div with the action output.
        $('.quickcontactDisplay').html(html);

        // re-do the form, as it has just been replaced
        $('form.quickcontact').ajaxForm(handleStuff);
    }

    // bind 'quickcontact' and provide a simple callback function 
    $('form.quickcontact').ajaxForm(handleStuff);
});

未对此进行测试,但希望它能有所帮助。

看起来它对我有帮助,但我想问一下如何调整上面的js以使用此功能:P
$(document).ready(function(){                                              

    function handleStuff(html)
    {
        //updates the .quickcontactDisplay div with the action output.
        $('.quickcontactDisplay').html(html);

        // re-do the form, as it has just been replaced
        $('form.quickcontact').ajaxForm(handleStuff);
    }

    // bind 'quickcontact' and provide a simple callback function 
    $('form.quickcontact').ajaxForm(handleStuff);
});