Jquery / AJAX / CakePHP模态消息,只有在出现模态错误时才会进入灯光输出框?

EDITS

这是我一直在使用的新代码,如果我在检查提交之外有新代码,那么页面甚至没有进入,它只是转到新的URL! 但然后加载模态检查,但在计划页面中完成所有这些,因为它刚刚加载了AJAX文件!

格伦。

$(document).ready(function() { $('#UserSignUpUserForm').on('submit', function(e) { if ($('div.error-message').size() == 0) { // if no error messages $('form').off('submit'); // unbind the form submission. $('form').submit(); // submit the form now to reload the page. } else { e.preventDefault(); $.post($(this).attr('action'), $(this).serialize(), function(res) { $('form').replaceWith(res); console.log(res); }) } //End of if / else check! }) }); 

旧post

好的,有人帮我,并给了我这个代码,以解决我的一个问题,但现在这个代码,一旦我开始更详细地检查它不起作用100%。 我正在使用CakePHP,我有一个用户注册管理员,它加载到一个灯光输出框。 当注册模式在密码中至少满足8个字母时,用户名必须是唯一的。

现在代码(我已添加到)给了我,以确保加载到灯光输出框中的模态错误的div。 问题是,当没有错误时,页面重定向加载到灯光输出框而不是主浏览器窗口。

所以我试图更改下面的代码添加一个检查,以查看这些或如果这些错误从服务器返回,然后如果这样解雇代码,如果没有(如果一切都好),那么不要做任何事情。

我对JQuery有点弱,PHP更像是我的东西。 对不起,如果我有任何newbe错误…..

  $('form').on('submit', function(e) { var pattern = 'error-meesage'; //I added this var exists = pattern.test(res); //I added this if(exists) { //I added this e.preventDefault(); $.post($(this).attr('action'), $(this).serialize(), function(res) { $('form').replaceWith(res); console.log(res); }) } //I added this }) 

这就是它给我回来的function,当错误消息div存在时它不起作用,它将它们加载到一个没有任何布局的新窗口中,因为请求是由AJAX发出的!

  Uncaught ReferenceError: $ is not defined 

非常感谢

格伦。


编辑

如果你删除我标记’我添加了’的行,那么代码没有任何问题,它可以访问Jquery lib文件,但我想我可能会停止从Cake的布局加载一路!

谢谢格伦。


您有要求的编辑代码是吹::

我还会告诉你,我现在已经拆除了灯箱,但我正在做的事情或多或少是相同的。 我现在仍然使用AJAX将这些页面加载到隐藏的div中,然后使用JQuery UI副作用。 但是同样的错误发生了。 如果有错误,则cake会使用包含类或错误消息的div从模式报告错误消息。 但是,如果没有错误消息div并且它保存得很好,它会将内容加载到屏幕一侧显示的div中,就像我的灯箱一样!

然而,随着你添加的额外代码,它只是在没有用户的情况下提交页面,看到整个方面都进来。即使对我来说,这应该是一个快速修复(只是没有绕过它让我,约5件事我我正在使用这个网站),只是为了检查post提交。 即使它确实提交它加载整个页面但超出我的默认布局,例如它仍在加载它有一个ajax页面。

我希望这已经说清楚了。

这是我的默认布局文件,

    Html->charset(); $Header .= 'XXXXXXXX'; $Header .= $this->Html->meta('icon'); $Header .= $this->AssetCompress->css('CssFile'); $Header .= $this->AssetCompress->script('JSFile'); $Header .= $this->fetch('meta'); $Header .= $this->fetch('css'); $Header .= $this->fetch('script'); echo $Header; ?> 

  <?php $MainLayout =''; $MainLayout .= $this->Session->flash('bad', array('element' => 'FlashError')); $MainLayout .= $this->Session->flash('good', array('element' => 'FlashGood')); $MainLayout .= $this->Session->flash('auth', array('element' => 'FlashError')); $MainLayout .= $this->fetch('content'); echo $MainLayout; ?> 
//These are the areas where file loads!

用户文件格式::

  layout = 'ajax'; $AddUserForm = $this->Form->create('User', array('url' => '/PATH-TO-GO-TO')); $AddUserForm .= "

Add New User

"; $AddUserForm .= $this->Form->input('username'); $AddUserForm .= $this->Form->input('password'); $AddUserForm .= $this->Form->input('email'); $AddUserForm .= $this->Form->input('role', array('options' => array('user' => 'User','admin' => 'Admin'))); $AddUserForm .= $this->Form->input('clients_id', array('options' => array($AllClients), 'empty'=>true)); $AddUserForm .= $this->Form->submit("SAVE USER", array('class' =>'Button')); $AddUserForm .= $this->Form->end(); echo $AddUserForm; ?> $(document).ready(function() { $('form').on('submit', function(e) { e.preventDefault(); $.post($(this).attr('action'), $(this).serialize(), function(res) { $('form').replaceWith(res); console.log(res); }) }) if ($('div.error-message').size() == 0) { // if no error messages $('form').off('submit'); // unbind the form submission. $('form').submit(); // submit the form now to reload the page. } });

JS文件加载侧盒::

  $(".ADDUSER").click(function() { //This is for the text link on my page $('.SideBoxUser').toggle("slide", { direction: "right" }, 1000); $('.SideBoxUser').load('/PATH-TO-GO-TO'); }); 

我希望这就是所有的代码,如果没有,请告诉我….

非常感谢格伦。

确保在代码之前引用了jQuery。 像这样: Html->script('jquery'); ?> Html->script('jquery'); ?>

这通常可以采用默认布局。

资料来源: http : //book.cakephp.org/2.0/en/core-libraries/helpers/js.html

  $('form').on('submit', function(e) { e.preventDefault(); $.post($(this).attr('action'), $(this).serialize(), function(res) { $('form').replaceWith(res); console.log(res); }) }) 

在这些行之后,只需添加此代码以检查html中的错误消息,如下所示,

 if ($('div.error-message').size() == 0) { // if no error messages $('form').off('submit'); // unbind the form submission. $('form').submit(); // submit the form now to reload the page. } 

我按照我的理解完成了,希望这可以帮助你。