0

编辑

这是我一直在工作的新代码,如果我在提交检查之外有新代码,那么页面甚至不会进入,它只是转到新 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!
 })
});

旧帖子

好的,有人帮助我并给了我这段代码来解决我的一个问题,但是现在这段代码,一旦我开始更详细地检查它,它就不能 100% 起作用。我正在使用 CakePHP,并且我有一个用户注册了管理员,它加载到一个熄灯箱中。当注册模式的密码中至少有 8 个字母且用户名不唯一时。

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

因此,我试图更改下面的代码以添加检查以查看这些错误何时或这些错误是否从服务器返回,然后如果是,则触发代码,如果不是(如果一切都很好)则不要做任何事情。

我对 JQuery 有点弱,PHP 更适合我。对不起,如果我有任何新的错误......

 $('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
 })

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

 Uncaught ReferenceError: $ is not defined 

非常感谢

格伦。


编辑

如果您删除我标记为“我添加了这个”的行,那么代码可以正常工作,它可以访问 Jquery lib 文件,但我想我可能会停止从 Cake 中的布局以一直加载!

谢谢格伦。


编辑您要求的代码是打击::

我还将向您介绍我现在已经移除了熄灯箱的事实,但我所做的或多或少是相同的事情。我现在将仍然使用 AJAX 的这些页面加载到隐藏的 div 中,然后使用 JQuery UI 副作用。但同样的错误也会发生。如果有错误,那么 cake 会使用具有类或错误消息的 div 从模态报告返回错误消息。但是,如果没有错误消息 div 并且保存得很好,它会将内容加载到显示在我屏幕一侧的 div 中,就像它对我的熄灯框所做的那样!

但是,随着您添加的额外代码,它甚至只是在没有用户的情况下提交页面,看到整个一面进来。即使对我来说,这应该是一个快速修复(只是还没有解决它,大约 5 件事我我正在使用这个网站),只是为了检查提交后。即使,当它提交它加载整个页面,但在我的默认布局之外,例如它仍在加载它有一个 ajax 页面。

我希望这已经说清楚了。

这是我的默认布局文件,

<!DOCTYPE html> 
<html>
<head>
<?php 
    $Header =  $this->Html->charset(); 
    $Header .= '<title>XXXXXXXX</title>';
    $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  ='<div id="Logo">' . $this->Html->image('logo.gif', array('alt' => 'top banner')) . '</div>';
        $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;
    ?> 
<div class="SideBoxUser"></div> //These are the areas where file loads!
<div class="SideBoxClient"></div> 

用户文件格式::

 <?php 
    $this->layout = 'ajax';
    $AddUserForm = $this->Form->create('User', array('url' => '/PATH-TO-GO-TO'));
    $AddUserForm .= "<h1>Add New User</h1>";
    $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;
 ?>
 <script>
 $(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.
  }
 });
  </script>

用于加载侧框的 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');
  });

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

非常感谢格伦。

4

2 回答 2

0
 $('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.
}

我按照我的理解做了,希望对你有帮助。

于 2013-09-27T05:05:39.637 回答
0

确保在代码之前引用了 jQuery。像这样的东西: <?php echo $this->Html->script('jquery'); ?>

这通常可以进入您的默认布局。

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

于 2013-09-26T18:55:12.030 回答