我计划在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
答案 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');}
});
它有效。 谢谢,没有人们的贡献,就做不到。