下拉列表中的Json parsererror

时间:2016-06-13 12:24:53

标签: javascript jquery json

我目前正在进行下拉列表并遇到很多麻烦。它是一个依赖的下拉列表,到目前为止,当我在第一个下拉列表中进行选择时,我可以获得正确的数据但是我无法在第二个下拉列表中显示它。我知道我得到了数据,因为我在调试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);
    }
我绝望了。我真的很感激任何帮助!提前致谢(:

1 个答案:

答案 0 :(得分:2)

当您正在制作json并且在您的客户端,您没有设置dataType,因此,dataType='text'被视为智能猜测。

如果您需要在ajax调用中添加dataType:'json',,那会更好。

作为一方,你不必两次发送相同的数据。您也是在ajax网址和data对象中发送的。

尝试从网址中删除:

var data = {
    dep_id: $(this).val()
};


 url: "{{ url('select_options') }}",
 data: data,