Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.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
CakePHP:JQuery submit()返回一个空白页面_Cakephp_Jquery - Fatal编程技术网

CakePHP:JQuery submit()返回一个空白页面

CakePHP:JQuery submit()返回一个空白页面,cakephp,jquery,Cakephp,Jquery,我在CakePHP控制器类中创建了一个函数来处理AJAX请求。但当使用CakePHP函数和简单(非MVC)PHP代码时,我发现了不同的结果。我的问题是当它进入submit()过程时。当使用CakePHP函数时,它返回空白页 以下是我使用的AJAX请求代码: var userdata = {username : $("#UserUsername").val()}; $.ajax({ type:'POST', url: 'http://

我在CakePHP控制器类中创建了一个函数来处理AJAX请求。但当使用CakePHP函数和简单(非MVC)PHP代码时,我发现了不同的结果。我的问题是当它进入submit()过程时。当使用CakePHP函数时,它返回空白页

以下是我使用的AJAX请求代码:

var userdata = {username : $("#UserUsername").val()};
        $.ajax({
            type:'POST',
            url: 'http://localhost/mycakephp/users/login',
            data: userdata,                     
            success: function(data){                                    
                if(data==0){
                    alert("empty");                 
                } else {
                    $("#UserLoginForm").submit();                       
                }
            }               
        });     
但当我将url指向外部站点时,如下所示:

网址:'http://localhost/test/test.php"


其中test.php是一个处理请求的简单php代码,提交过程工作正常。

根据您的评论,如果您使用SecurityComponent,您可以禁用登录操作的后期验证。在UsersController中,添加以下内容:

function beforeFilter()
{
    parent :: beforeFilter();

    switch($this->request->params['action'])
    {
        case 'login':
            $this->Security->validatePost = false;
            $this->Security->csrfCheck    = false;
            break;
    }
}

但是,您当然会失去SecurityComponent在登录操作中增加的值。

对不起,但是您的代码在我看来很奇怪:您有一个登录表单,您使用ajax发送您的用户名,调用控制器“UsersController”/function“login”,当您从该函数获得答案时,您再次提交另一个表单(“#UserLoginForm”)并再次发送给控制器?您正在发送两个表单!很可能这不是您想要的。如果我错了,请纠正我

我想你只需要提交UserLoginForm并等待答案,不管是OK还是NOOK,最后显示这个结果

您有两种选择:CakePHP方式或使用JQuery编写自己的ajax代码

1.卡克韦 使用
public$helpers=array('JS');
将JS Helper包含在控件中,然后使用JsHelper中的submit命令在视图中创建表单

看法 此元素的内容将打印在div“update\u ajax\u div”中

2.纯Ajax方式 第二个版本是通过在
标记中手动输入ajax代码来完成的。这个解决方案给了您更多的自由,允许您做更复杂的事情,但是代码不是那么干净

以下JQuery代码必须位于某个按钮/div/which事件中

$(document).ready(function(){

 $(".someButton").click(function() {


      // create the json data to be sent
   var username = $(....).val();
   var dataString = ...

      // call ajax      
   $.ajax({
          type: "POST",
      // never type full paths as in your example. They are sources of errors!
      url: "<?php echo $this->Html->url(array(
            "controller" => "users", 
            "action" => "login")); ?>,
      data: dataString,
      cache: false,
      success: function(html){
             $("#update_ajax_div").html(html);
      } 
   });

 ...
$(文档).ready(函数(){
$(“.someButton”)。单击(函数(){
//创建要发送的json数据
var username=$(..).val();
变量数据字符串=。。。
//调用ajax
$.ajax({
类型:“POST”,
//永远不要像您的示例中那样键入完整路径。它们是错误的来源!
网址:“,
数据:dataString,
cache:false,
成功:函数(html){
$(“#update_ajax_div”).html(html);
} 
});
...
控制器与CakePHP方式相同。请记住添加ajax布局


我希望它能帮助你。

它工作正常吗?你看过控制台了吗?看看控制台中得到的响应。如果我使用CakePHP调试控制台,它会显示调试计时器信息。在你的控制器上,尝试:调试($_请求);使用浏览器控制台检查ajax请求和响应。谢谢@nIcO,但这一个对我有效:
if(isset($this->Security)&&&$this->RequestHandler->isAjax()){$this->Security->enabled=false;}
这是另一种做同样事情的方法:禁用SecurityComponent。但在您的情况下,您可以在所有操作上都这样做。我仍然建议在特定操作上这样做,以便仅在必要时禁用它。
public function login(){

       // print the data being sent 
   $dataFromAjaxLink = $this->data[];
   $v = var_export($dataFromAjaxLink, true);
   $this->log("Ajax log:  ".$v, 'debug');

   if(isset($this->data['User'])){
       $user_name = $this->data['User']['username'];
        ...
       // do your stuff

   }
   // the answer must be ajax layout
   $this->layout = "ajax";
       // I like to use elements when using ajax, it keeps the folders clean
       //        in this example /app/View/Elements/display_ajax_result.ctp
   $this->render('/elements/display_ajax_result');

}
$(document).ready(function(){

 $(".someButton").click(function() {


      // create the json data to be sent
   var username = $(....).val();
   var dataString = ...

      // call ajax      
   $.ajax({
          type: "POST",
      // never type full paths as in your example. They are sources of errors!
      url: "<?php echo $this->Html->url(array(
            "controller" => "users", 
            "action" => "login")); ?>,
      data: dataString,
      cache: false,
      success: function(html){
             $("#update_ajax_div").html(html);
      } 
   });

 ...