2013-04-12 14 views
5

Cho một cuộc gọi ajax như:jquery 1.9 .ajax() datatype mặc định thay đổi?

$.ajax(
{ 
    url:"MyWebService.blah", 
    data: {"data":"awesome"}, 
    success : function(responseText) 
    { 
     var myJsonObj = $.parseJSON(responseText); 
     //do stuff with myJsonObj 
    } 
}); 

Điều này đã hoạt động tốt. Tôi cập nhật jQuery lên 1.9 ngày hôm nay (tôi đã ở trên 1.6 trong một thời gian) để có thể khắc phục tất cả các chức năng chuyển đổi đột ngột (một cái gì đó về eventLayer.X không còn được hỗ trợ), và bây giờ tất cả các cuộc gọi ajax của tôi đang ném sau lỗi javascript:

Uncaught Syntax Error: Unexpected token o 

sau một ít nghiên cứu và một số thử nghiệm, tôi phát hiện ra rằng "responseText" trong mã của tôi ở trên bây giờ là một đối tượng JSON, không phải là một chuỗi. Vì vậy, lỗi có ý nghĩa, nhưng tôi đang cố gắng để quấn đầu của tôi xung quanh này. JQuery thực sự có thay đổi kiểu trả về mặc định không? Tôi đã kiểm tra tài liệu:

http://api.jquery.com/jQuery.ajax/ 

và DataType được đặt mặc định thành "Intelligent Guess". Tôi có thể thấy nó có thể thuận tiện như thế nào, nhưng tôi cũng không thích nó.

Vì vậy, đây là những câu hỏi của tôi:

  1. này mới (ish) thay đổi trong jQuery là?
  2. Có phải phiên bản 1.9 đã thực hiện việc này hay đã được thực hiện theo cách này trước đây và tôi là hóa thạch đang sử dụng phiên bản 1.6?
  3. Một số đề xuất để xử lý điều này và loại "mã chứng minh" trong tương lai của tôi là gì?

Đây là thay đổi khá cơ bản ảnh hưởng đến nhiều mã. Tôi sẽ đi qua mã của tôi và loại bỏ bất kỳ trường hợp nào phân tích cú pháp dữ liệu được trả về của tôi thành JSON, nhưng toàn bộ điều này hơi đáng lo ngại. Tôi đã nhầm lẫn trong việc không chỉ định một dataType? Tôi cho rằng nó là một thực hành tốt để thực thi một dataType thay vì dựa vào mặc định, nhưng ... wow. Tôi có một mình về điều này, hoặc là một chút chắc chắn của một sự thay đổi trên một phần của jQuery?

+0

http://jsfiddle.net/5e9KC/ Làm việc tốt ở đây ... hmm 'o' này là gì? Phải có một cái gì đó khác thay đổi một cái gì đó ở đây –

+0

xem cho curCSS không được chấp nhận –

+0

@mcpDESIGNS fiddle của bạn không "làm việc" bởi vì nó không làm bất cứ điều gì. Rõ ràng javascript sẽ cần phải thực sự thực hiện để ném lỗi. rang, "curCSS?" Tôi không sử dụng nó trong mã của tôi, tại sao đó lại là một vấn đề? – AceCorban

Trả lời

6

jQuery tự động phát hiện DataType dựa trên những gì được trả về nếu không có DataType nào được đặt. Nhiều khả năng 1.9 chỉ cải thiện phát hiện đó để phát hiện đúng những gì bạn đang quay trở lại như json. Tốt nhất là luôn luôn cung cấp một kiểu dữ liệu để đảm bảo bạn sẽ luôn nhận được kết quả nhất quán.

+0

Vì vậy, bạn đang nói "Intelligent Guess" là mục đích của kiểu trả về ajax trong một thời gian (có thể ngay cả trong 1.6), nhưng nó chỉ là làm một công việc tốt hơn vào nó bây giờ? – AceCorban

+0

Có. Nó chỉ là làm một công việc tốt hơn tại Đoán những gì dữ liệu được. –

+0

Đủ công bằng. Cảm ơn. – AceCorban