Cakephp: проблемы с получением переменной Ajax - PullRequest
0 голосов
/ 06 июля 2018

Я планирую использовать Ajax в своем приложении CakePHP для обновления содержимого при выбранном изменении, однако сейчас я просто хочу вернуть строку и, к сожалению, не могу заставить ее работать,

Вот посмотрите на мой код

вид:

 //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); выводит "undefined".

Что говорит вкладка сети моего браузера:

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 голосов
/ 09 июля 2018

Хорошо, наконец-то все заработало,

Во-первых, мне пришлось отредактировать мой 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({
    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');}

});

И это работает. Не сделал бы это без вклада людей, спасибо.

0 голосов
/ 06 июля 2018

Вернуть закодированный массив

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