CakePHP:无法使用AJAX获取返回的数据

CakePHP:无法使用AJAX获取返回的数据,cakephp,jquery,Cakephp,Jquery,我想使用AJAX请求从控制器类中获取单个变量的值。但它仍然无法获取返回的变量。以下是我使用的代码: $(document).ready(function(){ $("#mybutton").click(function(){ var userdata = {username : $("#UserUsername").val()}; $.ajax({

我想使用AJAX请求从控制器类中获取单个变量的值。但它仍然无法获取返回的变量。以下是我使用的代码:

$(document).ready(function(){   
            $("#mybutton").click(function(){                        
                var userdata = {username : $("#UserUsername").val()};
                    $.ajax({
                        type:'POST',
                        url: 'http://localhost/mycakephp/tests/',
                        data: userdata,             
                        success: function(data){
                            alert(data.str);
                        }
                    });         
                });
         });
控制器类:

<?php
class TestsController extends AppController {

    public $name = 'Tests';     

    function index(){
        $this->autoRender=false;
        $str = "valid";
        return $str;
    }

}
?>


我想获取“$str”变量,但为什么alert()结果仍然是“未定义的”,这应该是“有效的”?

这是因为AJAX请求不是这样工作的。它们无法捕获任何PHP返回值,因为它既不是服务器端请求,也不是PHP。它所能做的就是捕获它得到的实际HTTP响应,类似于HTML或JSON。您只需在函数中回显结果,它就可以:

function index(){
    $this->autoRender = false;
    $str = "valid";
    echo $str; // echo rather than return here
}

这样,
$str
就可以在AJAX请求的
数据
休息(所以不是
数据.str
)中设置。

您需要更新jquery,在函数名后添加索引

 $(document).ready(function(){   
        $("#mybutton").click(function(){                        
            var userdata = {username : $("#UserUsername").val()};
                $.ajax({
                    type:'POST',
                    url: 'http://localhost/mycakephp/tests/index',
                    data: userdata,             
                    success: function(data){
                        alert(data.str);
                    }
                });         
            });
     });