0

このgetJSON非同期呼び出しをjQueryで実行して、データをJavaコードに戻したり、Javaコードから取り出したりしています。何らかの理由で、私は継続的にエラーを受け取ります:

"Ajax Error: Error invoking generateSearchQuery([object Object])"

jQueryとJavaコードの両方をデバッグしました。Javaコードは、JSONデータを受信して​​処理し、問題なく書き戻します。jQueryコードは、内部のgetJsonメソッドに入って試行すると、エラーをキックしますif(json.successful)

応答は次のとおりです。{"error":{"message":"","title":"Error Generating Search Query"},"data":[Ljava.lang.String;@1e40c9f,"successful":"successful"}

私はこの非同期呼び出しに数日間取り組んできましたが、それでも機能させることができません。何か案は?

jQuery関数:

generate : function(){

    getJson(
        Search.guid,
        "generateSearchQuery",
        {
            "data": [
                "val0",
                "val1",
                "val2",
                "val3",
                "val4"
            ]
        }, function(json) {
            Search.data = $.parseJSON(json.data);

            $.each(Search.data, function(k, v){
                $('#searchQuery').append(v + "\n");
            });
        });
},

Java関数:

    @AsyncService(name = "generateSearchQuery", permission = "")
    public void generateSearchQuery(HttpServletRequest req, HttpServletResponse res) {
        res.setHeader("Cache-Control", "no-cache");
        JSONResult result = new JSONResult("Error Generating Search Query");

        String[] arr = req.getParameterValues("data[]");

        for(int i = 0; i< arr.length; i++){
            arr[i] = "success"+i+"!";
        }

        result.put("data", arr);

        try {
            res.getWriter().print(result);
        } catch (IOException e) {
            // whatever
        }
    }
}

getJson:

function getJson(guid, service, parms, callback) {
    beginWork();
    $
            .ajax( {
                url : document.URL,
                type : 'GET',
                data : parms,
                cache : 'false',
                dataType : 'json',
                headers : {
                    'framework-guid' : guid,
                    'async-service' : service
                },
                success : function(json) {
                    endWork();
                    if (json.successful) {
                        callback(json);
                    } else {
                        error(json.error && json.error.title ? json.error.title
                                : 'No Title Provided', json.error
                                && json.error.message ? json.error.message
                                : 'No message provided for service ' + service);
                    }
                },
                error : function(jqXHR, textStatus, errorThrown) {
                    endWork();
                    error('Ajax Error', 'Error invoking ' + service + '('
                            + parms + ')');
                }
            });
}
4

2 に答える 2

1

サーバーからの応答の内容はjson形式ではなかったようです。$ .ajaxの応答のタイプをjsonとして指定するため、オブジェクトの結果をjsonに変換する必要があります。google gson http://code.google.com/p/google-gson/を使用して、次のような操作を行うことができます。

Gson gson = new Gson();
res.getWriter().print(gson.toJson(result));

また、getJsonでは、次の変更を行う必要があります。

//before
Search.data = $.parseJSON(json.data);
//after
Search.data = json.data;
于 2012-06-19T14:18:05.850 に答える
0

応答は有効であるとは言えません!

私はそれをチェックしました、あなたはそこに無効なラベルがありますLjava.lang.String; @ 1e40c9f、あなたのコードを解析するときに私が得るエラーは次のとおりです:

SyntaxError: invalid label
于 2012-06-19T14:19:21.387 に答える