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 的方法。