我目前正在进行下拉列表并遇到很多麻烦。它是一个依赖的下拉列表,到目前为止,当我在第一个下拉列表中进行选择时,我可以获得正确的数据但是我无法在第二个下拉列表中显示它。我知道我得到了数据,因为我在调试chrome时看到了它。这是我得到的一个例子:
Object {readyState: 4, responseText: "{"Hardware":1,"Software":2,"Other":3,"option":10}Page generated in 0.2831 seconds.<br><br><br>", status: 200, statusText: "OK"}
parsererror
Object {readyState: 4, responseText: "{"General":5,"Books":6}Page generated in 0.2902 seconds.<br><br><br>", status: 200, statusText: "OK"}
parsererror
这是我的javascript代码:
<script type="text/javascript">
$(document).ready(function () {
$("#request_department").change(function(){
var data = {
department_id: $(this).val()
};
$.ajax({
type: 'POST',
{#url: '{{ path("select_options") }} ?category_id' + dep,#}
url: "{{ url('select_options') }}?dep_id=" + data.department_id,
data: data,
success: function(data) {
window.alert('hi');
var $option_selector = $('#request_option');
$option_selector.html('<option>Option</option>');
for (var i=0, total = data.length; i < total; i++) {
$option_selector.append('<option value="' + data[i].id + '">' + data[i].option + '</option>');
}
},
error: function(xhr, error){
console.debug(xhr); console.debug(error);
},
});
});
});
</script>
这是控制器中的代码:
public function optionAjaxAction(Request $request)
{
if (!$request->isXmlHttpRequest()) {
throw new NotFoundHttpException();
}
$id = $request->query->get('dep_id');
$result = array();
// Return a list of options, based on the selected department
$repo = $this->getDoctrine()->getManager()->getRepository('MyBundle:RequestOption');
$option = $repo->findByDepartment($id, array('department' => 'asc'));
//var_dump($hardware);
foreach ($option as $o) {
$result[$o->getOption()] = $o->getId();
}
return new JsonResponse($result);
}
我绝望了。我真的很感激任何帮助!提前致谢(:
答案 0 :(得分:2)
当您正在制作json
并且在您的客户端,您没有设置dataType
,因此,dataType='text'
被视为智能猜测。
如果您需要在ajax调用中添加dataType:'json',
,那会更好。
作为一方,你不必两次发送相同的数据。您也是在ajax网址和data
对象中发送的。
尝试从网址中删除:
var data = {
dep_id: $(this).val()
};
url: "{{ url('select_options') }}",
data: data,