2011-02-10 34 views
15

Tôi vừa cập nhật lên JQuery 1.5 và tất cả các cuộc gọi ajax của tôi trả về JSON và một số plugin ngay lập tức bị hỏng.JQuery 1.5 và kiểu dữ liệu "văn bản JSON" mới

Trong pre-1,5 mã của tôi, tôi đã chỉ định datatype như:

dataType: "json" 

Thay đổi datatype để:

dataType: "text json" 

Sửa chữa các vấn đề nhưng tôi không muốn tự thay đổi các plugin như điều này sẽ ảnh hưởng đến nâng cấp.

Có cách nào xử lý tốt hơn với ít gián đoạn hơn không?

+2

Nếu họ trả về JSON, đó sẽ là cuộc gọi AJAJ, phải không? ;) – Guffa

+0

Nếu bạn không chỉ định dataType trong plugin thay vì sử dụng đối tượng cài đặt AJAX toàn cầu để làm điều này, điều này sẽ không giải quyết được vấn đề. –

+0

Nếu bạn sở hữu các tệp nguồn đang tạo dữ liệu cho các cuộc gọi AJAX, hãy thêm tiêu đề 'Content-Type: application/json' và nó sẽ sửa tất cả các tập lệnh của bạn (điều này nên được thực hiện bất cứ khi nào xuất ra bất kỳ JSON nào). –

Trả lời

7

Vấn đề này là do plugin xác thực jQuery và cách nó mở rộng đối tượng ajaxSettings để sử dụng riêng (thay đổi json gọi đến các cuộc gọi jsonp). Có hy vọng sẽ là một bản cập nhật chính thức xác nhận cắm sớm, nhưng trong khi chờ đợi, có một miếng vá có sẵn ở đây rằng sửa chữa vấn đề:

https://github.com/bigfix/jquery-validation/commit/9aa53f9241224ba349f9fe1b2c801be0f431b63b

Sửa:

jQuery Validation Plugin, tương thích với jQuery 1.5.1, có sẵn trên git hub: https://github.com/jzaefferer/jquery-validation

chỉnh sửa # 2: jQuery Validation Plugin 1.8, tương thích với jQuery 1.5.1 (trở về trước) được phát hành:

đọc về nó: http://bassistance.de/2011/03/25/release-validation-plugin-1-8/

Tải về nó: http://bassistance.de/jquery-plugins/jquery-plugin-validation/

+0

Cảm ơn câu trả lời này! Đúng - ngay cả khi trả lại đúng Loại Nội dung (ứng dụng/json) từ máy chủ, trình cắm thêm xác thực jQuery hiện tại (1.7) làm cho nó bị hỏng. –

+0

câu trả lời hay – dagda1

3

Mã chưa được kiểm tra, thêm mã này sau khi jQuery được bao gồm và trước khi mã tùy chỉnh của bạn chạy.

jQuery.ajaxSetup({ 
    converters: { 
    "json": jQuery.parseJSON, 
    "* json": jQuery.parseJSON 
    } 
}); 
+0

Đó là cùng một dòng như một cái gì đó mà tôi đã về để đề nghị ... Phiên bản jQuery mới có thể hành xử khác nhau nếu dataType là khác nhau từ các loại nội dung của dữ liệu đến, tức là cố gắng thực hiện một chuyển đổi trước khi phân tích cú pháp làm loại được chỉ định. – Guffa

+0

Điều này không hoạt động hoặc không may. Tôi đã kiểm tra các loại nội dung trong fiddler và nó thực sự là ứng dụng/json; charset = utf-8. – dagda1

4

Tôi gặp lỗi JQuery này để khắc phục sự cố http://bugs.jquery.com/ticket/8084.

Thêm đoạn mã sau sau khi tuyên bố kịch bản JQuery sửa chữa vấn đề:

$ .ajaxSetup ({ jsonp: null, jsonpCallback: null });

Các vấn đề liên quan