2010-04-11 35 views
10

Tôi đang sử dụng phương thức ajax của jQuery để lấy tệp JSON tĩnh. Dữ liệu được tải từ hệ thống tệp cục bộ, do đó không có máy chủ, vì vậy tôi không thể thay đổi loại MIME.Cảnh báo "không đúng ngữ cảnh" khi tải JSON phía máy khách trong Firefox qua jQuery.ajax

Tính năng này hoạt động tốt trong Safari, nhưng Firefox (3.6.3) báo cáo tệp là "không được định dạng đúng". Tôi biết, và đã xem xét, một bài tương tự ở đây trên Stack Overflow:

"not well-formed" error in Firefox when loading JSON file with XMLHttpRequest

Tôi tin JSON của tôi là tốt được hình thành:

{ 
    "_": ["appl", "goog", "yhoo", "vz", "t"] 
} 

gọi ajax của tôi rất đơn giản:

$.ajax({ 
    url: 'data/tickers.json', 
    dataType: 'json', 
    async: true, 
    data: null, 
    success: function(data, textStatus, request) { 
     callback(data); 
    } 
}); 

Nếu tôi quấn JSON bằng thẻ tài liệu:

<document>JSON data</document> 

như đã được đề cập trong câu hỏi Stack Overflow khác được tham chiếu ở trên, cuộc gọi ajax không thành công với lỗi phân tích cú pháp.

Vì vậy: có cách nào để tránh cảnh báo Firefox khi đọc trong tệp JSON phía máy khách không?

+0

gì sẽ xảy ra nếu bạn * không * sử dụng phần tử wrapper lạ? –

+0

Nếu tôi không sử dụng trình bao bọc lạ, thì dữ liệu JSON được tải, nhưng tôi nhận được cảnh báo không đúng định dạng. – Zhami

Trả lời

37

Đôi khi sử dụng máy chủ HTTP không phải là một tùy chọn, điều này có thể có nghĩa là các loại MIME sẽ không được tự động cung cấp cho một số tệp. Chuyển thể từ câu trả lời Peter Hoffman cho jQuery .getJSON Firefox 3 Syntax Error Undefined, sử dụng mã này trước khi thực hiện bất kỳ $ .getJSON() gọi:

$.ajaxSetup({beforeSend: function(xhr){ 
    if (xhr.overrideMimeType) 
    { 
    xhr.overrideMimeType("application/json"); 
    } 
} 
}); 

Hoặc, nếu bạn đang sử dụng $ .ajax():

$.ajax({ 
    url: url, 
    beforeSend: function(xhr){ 
    if (xhr.overrideMimeType) 
    { 
     xhr.overrideMimeType("application/json"); 
    } 
    }, 
    dataType: 'json', 
    data: data, 
    success: callback 
}); 
+5

Đáng chú ý, có vẻ như đây là STILL cần thiết trong năm 2016 bằng $ .getJSON(). –

+2

@ A.L.Flanagan Tôi liên tục ngạc nhiên rằng điều này vẫn đang nhận được upvotes. Tôi rất vui vì những điểm mà nó mang lại, nhưng tôi buồn vì nó không được giải quyết theo một cách khác thông qua việc phát hiện tự động các yêu cầu tệp cục bộ. – Ryan

+1

Cảm ơn, đã làm việc cho tôi! Tôi đang sử dụng jQuery cục bộ mà không có một máy chủ và nó cố định vấn đề của tôi. – Salvo

-4

Tệp và tập lệnh cục bộ không pha trộn. Cách quá nhiều thứ bảo mật của trình duyệt và sự kỳ quặc khác liên quan. Nếu bạn muốn thử nghiệm mọi thứ, bạn nên chạy công cụ của mình thông qua máy chủ HTTP. Cài đặt một cục bộ có thể là một ý tưởng hay.

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