cakephp jquery ajax returns 空
cakephp jquery ajax returns null
我不确定这里发生了什么或者我做错了什么。
我的 ajax 从 cakephp 控制器 returns 响应 e 当我做 console.log() 在 chrome 开发者工具中。
此外,当我检查网络选项卡时,它显示 无响应。
这是我的代码
view.ctp
var formUrl = "<?php echo Router::url(array('controller' => 'ExamsScores','action' => 'ajaxReturn')); ?>";
//console.log(form);
//console.log(exam);
//console.log(formUrl);
var string = "form="+form + "&exam="+ exam;
$.ajax({
type: "POST",
url: formUrl,
data: string,
dataType: "json",
success: function(response) {
console.log(response);
},
error: function(xhr,status,error) {
console.log(status);
}
});
controller_action
function ajaxReturn(){
if($this->RequestHandler->isAjax()){
$this->autoRender = false;
$form = $this->request->data['form'];
$exam = $this->request->data['exam'];
$results = $this->ExamsScore->query("SELECT concat(students.first_name,' ',students.last_name) as NAME,
exam_type as EXAM,form_name as FORM,sum(score) as TOTAL,avg(score) as MEAN,exams_scores.admission_no from
students,exams,forms,exams_scores where (exams_scores.admission_no = students.admission_no) and
(exams_scores.exam_id = $exam) and (exams.id = $exam) and (students.form_id = $form) and (forms.id = $form)
group by exams_scores.admission_no order by TOTAL desc
");
}
$jsonData = json_encode($results);
//print_r($jsonData);
$this->set('response',$jsonData);
重点来了..
如果我在控制器中 评论 print_r($jsonData)..ajax响应是 null..
如果我 不评论 它的响应 如我所料返回 。
到底是什么导致了这种情况的发生,为什么响应为空,因为我只是使用 print_r 进行调试。
有什么帮助吗?
它说 CakeRequest 现在负责。您可以找到合适的段落 here.
function ajaxReturn(){
if($this->request->is('ajax')){
$this->autoRender = false;
$form = $this->request->data['form'];
$exam = $this->request->data['exam'];
$results = $this->ExamsScore->query("SELECT concat(students.first_name,' ',students.last_name) as NAME,
exam_type as EXAM,form_name as FORM,sum(score) as TOTAL,avg(score) as MEAN,exams_scores.admission_no from
students,exams,forms,exams_scores where (exams_scores.admission_no = students.admission_no) and
(exams_scores.exam_id = $exam) and (exams.id = $exam) and (students.form_id = $form) and (forms.id = $form)
group by exams_scores.admission_no order by TOTAL desc
");
}
$jsonData = json_encode($results);
//print_r($jsonData);
$this->set('response',$jsonData);
好的,有几点需要注意。
将您的 ajax 请求重新格式化如下:
var url = window.app.url+"/exams/ajaxReturn";
$.ajax({
type: "POST",
url: url,
data: {form:form,exam:exam},
dataType: "json",
success: function(response) {
console.log(response);
},
error: function(xhr,status,error) {
console.log(status);
}
});
请注意 data
字段如何更改为与您的格式不同的格式,这将作为 $_POST['form']
和 $_POST['exam']
[=17= 到达 php 文件]
现在,您的 php 文件:
function ajaxReturn(){
$this->request->onlyAllow('ajax');
$this->autoRender = false;
$this->layout = 'ajax';
$form = $this->request->data['form'];
$exam = $this->request->data['exam'];
// Other code that was omitted for example purposes
echo json_encode($results);
}
前 3 行确保它只接受 ajax 请求,并告诉 cakephp 不要使用该方法渲染任何 .ctp
文件。
此外,请注意我 return json 对象与 echo
的方式。这是 return json 返回 ajax 的方法。
我不确定这里发生了什么或者我做错了什么。
我的 ajax 从 cakephp 控制器 returns 响应 e 当我做 console.log() 在 chrome 开发者工具中。 此外,当我检查网络选项卡时,它显示 无响应。 这是我的代码
view.ctp
var formUrl = "<?php echo Router::url(array('controller' => 'ExamsScores','action' => 'ajaxReturn')); ?>";
//console.log(form);
//console.log(exam);
//console.log(formUrl);
var string = "form="+form + "&exam="+ exam;
$.ajax({
type: "POST",
url: formUrl,
data: string,
dataType: "json",
success: function(response) {
console.log(response);
},
error: function(xhr,status,error) {
console.log(status);
}
});
controller_action
function ajaxReturn(){
if($this->RequestHandler->isAjax()){
$this->autoRender = false;
$form = $this->request->data['form'];
$exam = $this->request->data['exam'];
$results = $this->ExamsScore->query("SELECT concat(students.first_name,' ',students.last_name) as NAME,
exam_type as EXAM,form_name as FORM,sum(score) as TOTAL,avg(score) as MEAN,exams_scores.admission_no from
students,exams,forms,exams_scores where (exams_scores.admission_no = students.admission_no) and
(exams_scores.exam_id = $exam) and (exams.id = $exam) and (students.form_id = $form) and (forms.id = $form)
group by exams_scores.admission_no order by TOTAL desc
");
}
$jsonData = json_encode($results);
//print_r($jsonData);
$this->set('response',$jsonData);
重点来了..
如果我在控制器中 评论 print_r($jsonData)..ajax响应是 null.. 如果我 不评论 它的响应 如我所料返回 。
到底是什么导致了这种情况的发生,为什么响应为空,因为我只是使用 print_r 进行调试。
有什么帮助吗?
它说 CakeRequest 现在负责。您可以找到合适的段落 here.
function ajaxReturn(){
if($this->request->is('ajax')){
$this->autoRender = false;
$form = $this->request->data['form'];
$exam = $this->request->data['exam'];
$results = $this->ExamsScore->query("SELECT concat(students.first_name,' ',students.last_name) as NAME,
exam_type as EXAM,form_name as FORM,sum(score) as TOTAL,avg(score) as MEAN,exams_scores.admission_no from
students,exams,forms,exams_scores where (exams_scores.admission_no = students.admission_no) and
(exams_scores.exam_id = $exam) and (exams.id = $exam) and (students.form_id = $form) and (forms.id = $form)
group by exams_scores.admission_no order by TOTAL desc
");
}
$jsonData = json_encode($results);
//print_r($jsonData);
$this->set('response',$jsonData);
好的,有几点需要注意。
将您的 ajax 请求重新格式化如下:
var url = window.app.url+"/exams/ajaxReturn";
$.ajax({
type: "POST",
url: url,
data: {form:form,exam:exam},
dataType: "json",
success: function(response) {
console.log(response);
},
error: function(xhr,status,error) {
console.log(status);
}
});
请注意 data
字段如何更改为与您的格式不同的格式,这将作为 $_POST['form']
和 $_POST['exam']
[=17= 到达 php 文件]
现在,您的 php 文件:
function ajaxReturn(){
$this->request->onlyAllow('ajax');
$this->autoRender = false;
$this->layout = 'ajax';
$form = $this->request->data['form'];
$exam = $this->request->data['exam'];
// Other code that was omitted for example purposes
echo json_encode($results);
}
前 3 行确保它只接受 ajax 请求,并告诉 cakephp 不要使用该方法渲染任何 .ctp
文件。
此外,请注意我 return json 对象与 echo
的方式。这是 return json 返回 ajax 的方法。