Cakephp:麻烦获取Ajax变量

时间:2018-07-06 08:46:29

标签: jquery ajax cakephp cakephp-2.0

我计划在cakephp应用程序中使用Ajax来更新选定更改的内容,但是,现在,我只想返回一个字符串,可惜我无法使其正常工作,

这是我的代码

视图:

 //triggered on a select change
$.ajax({
    type: 'get',
    url: '<?php echo Router::url(array('controller' => 'pages', 'action' => 'getPrices')); ?>',
    beforeSend: function(xhr)
    {
        xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    },
    success: function(response)
    {

    console.log(response);//returns the empty echo from get_prices.ctp
    console.log(response.testdata);//returns undefined

    },  
    error: function(e)
    {
    console.log(e);
    }   
}); 

控制器:

public function getPrices()
{
    //$this->request->onlyAllow('ajax'); //tried with and without this

    $testdata = 'testvalue';



    echo json_encode($testdata);
    //also tried : $this->set(compact('testdata'));
}

get_prices.ctp:

<?php
if(!empty($testdata))
{
    echo $testdata;
}
else
{
    echo "empty";
}

console.log(response);从get_prices.ctp中的回声中输出“空”

console.log(response.testdata);输出“未定义”。

我的浏览器的“网络”标签上必须说的是

General
Request URL: http://localhost:8888/myapp/pages/getPrices
Request Method: GET
Status Code: 200 OK
Remote Address: [::1]:8888
Referrer Policy: no-referrer-when-downgrade

Response
empty

2 个答案:

答案 0 :(得分:0)

返回编码数组

echo json_encode(['testdata'=>$testdata]);

答案 1 :(得分:0)

好吧,终于成功了,

首先,我不得不编辑我的route.php,虽然我确实在其中声明了getPrices操作,但它与这一行冲突

Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));

getPrices在此之后声明,因此被忽略,因此我只是在此行之前声明了它。

然后更新了我的控制器:

public function getPrices()
{

    $this->autoRender = false;
    $testdata = 'testvalue';

    echo json_encode(['testdata'=>$testdata]);
}

以及我认为的ajax:

$.ajax({
    url: '<?php echo $this->Html->url(array('controller' => 'pages', 'action' => 'getPrices')); ?>',
    datatype: 'json',
    cache: false,
    data: {myVar:'Success'},
    success: function (data) {
        console.log('success');
        var decodeddata = JSON.parse(data);
        console.log(decodeddata.testdata);
    },
    error: function(){console.log('failed');}

});

它有效。 谢谢,没有人们的贡献,就做不到。