ข้อผิดพลาด Ajax เมื่อเรียกใช้ jQuery getJSON

ฉันกำลังเรียกใช้การเรียกใช้ async ของ getJSON ใน jQuery เพื่อดึงข้อมูลกลับเข้าและออกจากโค้ด 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"}

ฉันทำงานกับการโทรแบบ async นี้มาสองสามวันแล้ว แต่ก็ยังไม่สามารถทำงานได้ มีความคิดอะไรบ้าง?

ฟังก์ชั่น 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");
            });
        });
},

ฟังก์ชั่นจาวา:

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

รับเจสัน:

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 แหล่งที่มา
comment
Stack Overflow ไม่ใช่บริการแก้ไขจุดบกพร่อง คุณควรลองแก้ไขโค้ด ค้นหาว่าปัญหาอยู่ที่ใด จากนั้นสอบถามอย่างเป็นรูปธรรม คำถาม.   -  person gdoron is supporting Monica    schedule 19.06.2012
comment
อาจเป็นเพราะคุณมี getJSON แทนที่จะเป็น $.getJSON   -  person ayyp    schedule 19.06.2012
comment
getJsonคืออะไร? นั่นเป็นเสื้อคลุมสำหรับ $.getJSON หรือไม่? $.getJSON รับพารามิเตอร์เพียง 3 ตัวเท่านั้น และยังแยกวิเคราะห์ JSON ให้คุณอีกด้วย (ไม่จำเป็นต้องใช้ $.parseJSON ).   -  person Rocket Hazmat    schedule 19.06.2012
comment
@gdoron ฉันได้แก้ไขจุดบกพร่องแล้ว ดูเหมือนว่าทุกอย่างจะทำงานได้ดีจนกระทั่งเข้าสู่วิธี getJSON ของ jQuery โดยจะตรวจสอบ: if (json.successful) { จากนั้นเตะข้อผิดพลาด จากนั้นรันโค้ด Java ของฉัน แต่ไม่ส่งผลลัพธ์กลับไปยังฝั่ง jQuery   -  person PseudoPsyche    schedule 19.06.2012
comment
การตอบสนองมีลักษณะอย่างไร. วางไว้บนหน้า ใช้เครื่องมือเช่น Fiddler เพื่อรับการตอบกลับ   -  person epascarello    schedule 19.06.2012
comment
ตกลง ฉันเปลี่ยนเป็น $.getJSON แล้วได้ "Ajax Error: error" ฉันแก้ไขมันแล้วและมันจะเป็นวิธีการที่แตกต่างไปจากเดิมอย่างสิ้นเชิง ดังนั้นฉันคิดว่า getJson อาจเป็นสิ่งที่คนอื่นเขียนขึ้น ฉันโพสต์ไปที่ OP   -  person PseudoPsyche    schedule 19.06.2012
comment
ตอบกลับ: {"error":{"message":"","title":"Error Generating Search Query"},"data":[Ljava.lang.String;@1e40c9f,"successful":"successful"}   -  person PseudoPsyche    schedule 19.06.2012
comment
@PseudoPsyche การตอบสนองไม่ถูกต้อง!   -  person Mihai Stancu    schedule 19.06.2012
comment
ฉันตรวจสอบแล้ว คุณมีป้ายกำกับที่ไม่ถูกต้องที่นั่น Ljava.lang.String;@1e40c9f   -  person Mihai Stancu    schedule 19.06.2012


คำตอบ (2)


ดูเหมือนว่าเนื้อหาการตอบกลับจากเซิร์ฟเวอร์ไม่ใช่รูปแบบ 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;
person guanxiaohua2k6    schedule 19.06.2012
comment
สิ่งนี้ได้ผลในครั้งแรก แต่ครั้งที่สองที่ฉันลองใช้งานคอนโซลจะวาง json is null ที่ if(json.successful) - person PseudoPsyche; 19.06.2012
comment
อ่า ไม่เป็นไร! ฉันรีสตาร์ทเซิร์ฟเวอร์ JBoss และทุกอย่างทำงานได้ดี! ขอบคุณ! นอกจากนี้ยังค่อนข้างสะดวกเนื่องจากฉันใช้ Gson ที่อื่นในแอปนี้อยู่แล้ว ห้องสมุดจึงอยู่ที่นั่นแล้ว - person PseudoPsyche; 19.06.2012
comment
ฉันไม่สามารถหาเหตุผลอธิบายได้ แต่เห็นได้ชัดว่าคุณควรส่งคืนสตริงที่มีรูปแบบ json บนเซิร์ฟเวอร์หากคุณใช้จาวาสคริปต์ดังกล่าว - person guanxiaohua2k6; 19.06.2012

การตอบสนองไม่ถูกต้อง!

ฉันตรวจสอบแล้ว คุณมีป้ายกำกับที่ไม่ถูกต้องที่นั่น Ljava.lang.String;@1e40c9f ข้อผิดพลาดที่ฉันได้รับเมื่อแยกวิเคราะห์โค้ดของคุณคือ:

SyntaxError: invalid label
person Mihai Stancu    schedule 19.06.2012