Kesalahan Ajax saat menjalankan jQuery getJSON

Saya menjalankan panggilan async getJSON ini di jQuery untuk memasukkan kembali data dan kemudian mengeluarkannya dari kode Java saya. Untuk alasan apa pun saya terus-menerus mendapatkan kesalahan:

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

Saya telah men-debug jQuery dan kode Java. Kode Java menerima data JSON, memprosesnya, dan menulisnya kembali tanpa masalah. Kode jQuery menendang kesalahan ketika masuk ke metode getJson internal dan mencoba if(json.successful).

Tanggapannya adalah: {"error":{"message":"","title":"Error Generating Search Query"},"data":[Ljava.lang.String;@1e40c9f,"successful":"successful"}

Saya telah mengerjakan panggilan asinkron ini selama beberapa hari sekarang, tetapi masih belum bisa berfungsi. Ada ide?

fungsi 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");
            });
        });
},

Fungsi Jawa:

    @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
        }
    }
}

dapatkanJson:

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 + ')');
                }
            });
}

person PseudoPsyche    schedule 19.06.2012    source sumber
comment
Stack Overflow bukan layanan debugging Anda harus mencoba men-debug kodenya, temukan di mana masalahnya, tanyakan yang konkret pertanyaan.   -  person gdoron is supporting Monica    schedule 19.06.2012
comment
Mungkinkah karena Anda memiliki getJSON, bukan $.getJSON?   -  person ayyp    schedule 19.06.2012
comment
Apa itu getJson? Apakah itu pembungkus untuk $.getJSON? $.getJSON hanya membutuhkan 3 parameter, dan juga mem-parsing JSON untuk Anda (tidak perlu $.parseJSON ).   -  person Rocket Hazmat    schedule 19.06.2012
comment
@gdoron, saya telah men-debugnya. Semuanya tampak berfungsi dengan baik hingga masuk ke metode getJSON jQuery di mana ia memeriksa: if (json.successful) { lalu menendang kesalahan, lalu menjalankan kode Java saya tetapi tidak meneruskan hasilnya kembali ke sisi jQuery.   -  person PseudoPsyche    schedule 19.06.2012
comment
Seperti apa tanggapannya. Letakkan itu di halaman. Gunakan alat seperti Fiddler untuk mendapatkan respons.   -  person epascarello    schedule 19.06.2012
comment
Oke, jadi saya mengubahnya menjadi $.getJSON dan saya mendapatkan "Ajax Error: error". Saya men-debugnya dan menggunakan metode yang sama sekali berbeda, jadi menurut saya getJson mungkin adalah sesuatu yang ditulis oleh orang lain. Saya mempostingnya ke OP.   -  person PseudoPsyche    schedule 19.06.2012
comment
Respon: {"error":{"message":"","title":"Error Generating Search Query"},"data":[Ljava.lang.String;@1e40c9f,"successful":"successful"}   -  person PseudoPsyche    schedule 19.06.2012
comment
@PseudoPsyche, responsnya sepertinya tidak valid!   -  person Mihai Stancu    schedule 19.06.2012
comment
Saya sudah memeriksanya, Anda memiliki label yang tidak valid di sana Ljava.lang.String;@1e40c9f   -  person Mihai Stancu    schedule 19.06.2012


Jawaban (2)


Tampaknya isi respon dari server bukan format json. Karena Anda menentukan tipe respon $.ajax sebagai json, maka Anda perlu mengonversi hasil objek ke json. Anda dapat menggunakan google gson http://code.google.com/p/google-gson/, dan lakukan sesuatu seperti berikut.

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

Dan di getJson, Anda harus melakukan perubahan berikut.

//before
Search.data = $.parseJSON(json.data);
//after
Search.data = json.data;
person guanxiaohua2k6    schedule 19.06.2012
comment
Ini berhasil pertama kali, tetapi kedua kalinya saya mencoba menjalankannya, konsol mengeluarkan json is null di if(json.successful) - person PseudoPsyche; 19.06.2012
comment
Ah, sudahlah! Saya me-restart server JBoss saya dan semuanya berfungsi dengan baik! Terima kasih! Ini juga cukup nyaman karena saya sudah menggunakan Gson di tempat lain di aplikasi ini, jadi perpustakaannya sudah ada di sana. - person PseudoPsyche; 19.06.2012
comment
Saya tidak dapat menemukan alasan untuk menjelaskannya. Namun yang jelas Anda harus mengembalikan string dengan format json di server jika Anda menggunakan javascript tersebut. - person guanxiaohua2k6; 19.06.2012

Tanggapannya sepertinya tidak valid!

Saya memeriksanya, Anda memiliki label yang tidak valid di sana Ljava.lang.String;@1e40c9f, kesalahan yang saya dapatkan saat menguraikan kode Anda adalah:

SyntaxError: invalid label
person Mihai Stancu    schedule 19.06.2012