我正在尝试使用cakephp运行一些示例ajax应用程序。我开始阅读这篇博文:http://www.dereuromark.de/2014/01/09/ajax-and-cakephp/我试图改编我的架构。
现在我被困在这里: 当我更改第一个选择框的选择时,我收到错误警告:undefined。
当我试图直接在浏览器中调用AJAX-URL时,它实际上返回了应该在第二个选择框中更新的正确的html内容,但是我看到还有一个500 Server-Error也被返回哪个sais无法加载recource http://localhost/favicon.ico。这就是为什么ajax-call sais"出现错误的问题"?我不知道为什么这个资源甚至被调用,为什么它在localhost /而不是app-folder中查找。任何人都能告诉我我需要做些什么才能让ajax-sample运行?这是ajax调用的JS代码:
<script>
$(function() {
$('#countries').change(function() {
var selectedValue = $(this).val();
var targeturl = $(this).attr('rel') + '?id=' + selectedValue;
$.ajax({
type: 'get',
url: targeturl,
beforeSend: function(xhr) {
alert(targeturl);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
},
success: function(response) {
alert(response);
if (response.content) {
alert("content");
$('#provinces').html(response.content);
}
},
error: function(e) {
alert("An error occurred: " + e.responseText.message);
console.log(e);
}
});
});
});
</script>
这些是我的控制器功能:
public $components = array('Session','RequestHandler');
...
public function chained_dropdowns() {
$countries = $this->TestRun->find('list');
$countryProvinces = array();
foreach ($countries as $key => $value) {
$countryProvinces = $this->TestRun->TestStepRun->find('list',array('conditions'=>array('TestStepRun.test_run_id'=>$key)));
break;
}
$this->set(compact('countries', 'countryProvinces'));
}
public function country_provinces_ajax() {
//$this->request->onlyAllow('ajax');
$id = $this->request->query('id');
if (!$id) {
throw new NotFoundException();
}
//$this->viewClass = 'Tools.Ajax';
//$this->loadModel('Data.TestStepRun');
$countryProvinces = $this->TestRun->TestStepRun->find('list',array('conditions'=>array('TestStepRun.test_run_id'=>$id)));
$this->set(compact('countryProvinces'));
}
}
我在我的routes.php中添加了
Router::parseExtensions();
Router::setExtensions(array('json'));
[更新] 我刚刚将错误输出行更改为:
alert("An error occurred: " + e.responseText);
现在,我收到错误消息:&#34; An error occured: <option value="">...
&#34;
这是来自json-view的数据,应该传递给success-function。我只是不知道,为什么会抛出错误。