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でparseerrorが発生します。

私は実際に次のように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を返さない可能性があると思われます。Content-Typeサーバーがステータスコード200で応答し、ヘッダーをに設定application/jsonし、応答本文で正確なJSONを送信することを絶対に確認する必要があります。FireBugまたは同様のツールを使用して、このAJAXリクエスト中にネットワーク経由で正確に送信されるものを分析します。

また、termrequestパラメータを送信しているようには見えません。このようにしてみてください:

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 に答える