CakePHP:JQuery submit()返回一个空白页面
我在CakePHP控制器类中创建了一个函数来处理AJAX请求。但当使用CakePHP函数和简单(非MVC)PHP代码时,我发现了不同的结果。我的问题是当它进入submit()过程时。当使用CakePHP函数时,它返回空白页 以下是我使用的AJAX请求代码: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://
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);
}
});
...