0

我有以下Json:

[{"label":"75001","value":"75001"},
{"label":"75002","value":"75002"},
{"label":"75003","value":"75003"},
{"label":"75004","value":"75004"},
{"label":"75005","value":"75005"},
{"label":"75006","value":"75006"},
{"label":"75007","value":"75007"},
{"label":"75008","value":"75008"},
{"label":"75009","value":"75009"}]

它会在 JQuery 中导致解析错误。

我实际上使用 jquery.ui 自动完成控件如下:

jQuery(document).ready(function() {
            jQuery("#accountPostcode").autocomplete({
                source : function(request, response) {
                    var jqxhr = jQuery.ajax({
                        url : "utils/JSonPostcodesWithQueryParam",
                        dataType : "json"
                    }).fail(function() { 
                        console.log("error:");
                        console.log(jqxhr.statusText);
                    });
                },
                minLength : 2
            });
        });

我不确定我做错了什么,因为我的 Json 似乎是正确的......

任何人有任何线索?

编辑:

以下是生成 Json 的内容:

package com.bignibou.web.pages.utils;

import java.util.List;

import org.apache.tapestry5.EventConstants;
import org.apache.tapestry5.StreamResponse;
import org.apache.tapestry5.annotations.OnEvent;
import org.apache.tapestry5.annotations.RequestParameter;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.util.TextStreamResponse;

import com.bignibou.domain.utils.PostcodeJson;
import com.bignibou.service.AccountService;
import com.google.gson.Gson;

public class JSonPostcodesWithQueryParam {

    @Inject
    private AccountService service;

    @OnEvent(EventConstants.ACTIVATE)
    StreamResponse loadPostcodes(@RequestParameter(value = "term") String beginningOfPostcode) {
        Gson gson = new Gson();
        List<PostcodeJson> postcodes = service.loadPostcodes(beginningOfPostcode);
        return new TextStreamResponse("application/json","UTF-8", gson.toJson(postcodes));
    }
}
4

3 回答 3

1

确保您的服务器将标头响应设置为application/json. 这有时会导致在响应中解析 html,具体取决于您的后端。

于 2012-01-28T14:28:32.113 回答
1

除了您从未对 AJAX 调用的结果执行任何操作这一事实之外,您的代码看不到任何问题。这是一个完整的工作演示。我怀疑您的服务器可能以某种方式无法返回正确的 JSON,这是最可能导致错误的原因。您应该绝对确保服务器以状态码 200 进行响应,将Content-Type标头设置为application/json并在响应正文中发送准确的 JSON。使用 FireBug 或类似工具来分析在此 AJAX 请求期间通过网络发送的确切内容。

此外,您似乎从未发送过术语请求参数。试试这样:

jQuery('#accountPostcode').autocomplete({
    source : function(request, response) {
        var jqxhr = jQuery.ajax({
            url : 'utils/JSonPostcodesWithQueryParam',
            data: { term: request.term },
            dataType : 'json'
        }).fail(function() {
            console.log('error:');
            console.log(jqxhr.statusText);
        }).success(function(data) {
            response(data);
        });
    },
    minLength : 2
});
于 2012-01-28T14:35:53.527 回答
0

我没有使用 Java,但尝试使用 PHP 解码 JSON 时遇到了类似的解析错误。我不得不操纵你的 JSON 来正确解析它:

{
    "key": {
        "0": {"label": "75001", "value": "75001"},
        "1": {"label": "75002", "value": "75002"},
        "2": {"label": "75003", "value": "75003"},
        "3": {"label": "75004", "value": "75004"},
        "4": {"label": "75005", "value": "75005"},
        "5": {"label": "75006", "value": "75006"},
        "6": {"label": "75007", "value": "75007"},
        "7": {"label": "75008", "value": "75008"},
        "8": {"label": "75009", "value": "75009"}
    }
}

我试图让它解析而不必定义内部的数字键,但是我仍然遇到解析错误。希望这可以帮助。

于 2012-01-28T14:49:35.977 回答