为什么jQueryAjax请求在初始请求之后中断?
我有以下cakephp格式:为什么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-&
<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);
});