2011-09-24 37 views
7

Tôi đã thu hẹp vùng sự cố của mình xuống dưới chức năng bên dưới. Đó là một phần của một usercript tôi đang viết. Nó hoạt động hoàn hảo trong Chrome, nhưng không hoạt động ở tất cả trong Firefox/Greasemonkey. Tôi đã leng keng với nó cả ngày và đã đánh một bức tường gạch. Điều duy nhất có ý nghĩa là nếu JSON.parse không hoạt động đúng, điều này sẽ có ý nghĩa vì Chrome được biết là xử lý JSON.parse hơi khác một chút ... nhưng tôi biết JSON được tạo thành hoàn hảo!XMLHttpRequest cho tệp JSON hoạt động hoàn hảo trong Chrome, nhưng không phải trong Firefox

function getTagline() { 
    var jsonfile = new XMLHttpRequest(); 
    jsonfile.open("GET", "http://example.com/somegood.json", true); 
    jsonfile.onreadystatechange = function() { 
     if (jsonfile.readyState == 4) { 
      if (jsonfile.status == 200) { 
       var taglines = JSON.parse(jsonfile.responseText); 
       var choose = Math.floor(Math.random() * taglines.length); 
       var tagline = document.createTextNode(taglines[choose].metais); 
       insertTagline(tagline); 
      } 
     } 
    }; 
    jsonfile.send(null); 
} 

Bất kỳ ý tưởng nào?

+0

Bạn có thể đăng một phần JSON bạn đang cố phân tích cú pháp không? – Grego

+0

Đây là một ví dụ: [{"commenturl": ["/ 107669/Giải pháp-là-mới-Lạc quan # 3934686"], "metais": ["Metafilter: lấy ngày nghỉ và ngồi trong tầng hầm trong bóng tối và không thực sự trả lời bất cứ điều gì ở tất cả "]," người dùng ": [" người quản lý kỳ lạ "]}, {" commenturl ": ["/107126/Lancelot-Link-Bí mật-Tinh tinh # 3905976 "]," metais " : ["Metafilter: Họ không phải khỉ. Họ là người đi bộ."], "Người dùng": ["Daddy-O"]}, {"commenturl": ["/ 107129/My-job-is-to -watch-dreams-die # 3906426 "]," metais ": [" MetaFilter: chủ yếu là những người khủng khiếp ẩn đằng sau liên kết tốt "]," người dùng ": [" Ngất xỉu "]}] – gilrain

+0

Vì vậy, đó là danh sách các đối tượng . Nó phải hợp lệ, theo JSON.org. Tôi nghĩ rằng ...: P – gilrain

Trả lời

1

Sau một số khắc phục sự cố khác, hóa ra đó là vấn đề XHR đa miền. Theo mặc định, Chrome hoạt động trong Chrome vì Chrome đã cho phép tập lệnh trên tất cả các miền. Tôi đã chỉnh sửa tiêu đề để Chrome biết chỉ cho phép các miền phù hợp, nhưng Firefox không cho phép miền chéo trên XHR bất kể. Điều này đã được cố định bằng cách chuyển sang GM_xmlhttpRequest thay thế, cho phép tên miền chéo trong Firefox và, may thay, Chrome cũng hỗ trợ.

Cảm ơn sự giúp đỡ, mọi người!

1

Tôi được thông báo rằng JSON không được hỗ trợ mà không có thư viện bổ sung, xem here câu trả lời được chấp nhận. Tôi cũng đã thử điều này

try { 
    clientList = JSON.parse(responseText); 
} catch (e) { 
    alert(e.message); 
} 

Và thông báo tôi nhận được là "JSON chưa được xác định". Vì vậy, câu trả lời có vẻ đúng.

+0

Cảm ơn bạn! Tôi sẽ thử vào ngày mai. [Bài viết này] (https://developer.mozilla.org/En/Using_native_JSON) khiến tôi nghĩ rằng nó được hỗ trợ, mặc dù ... Tôi sẽ bình luận lại sau khi tôi đã thử nó. – gilrain

+0

Hm, có vẻ như không phải ... chuyển sang sử dụng eval cho dòng đó, để kiểm tra. Nó vẫn hoạt động tốt trong Chrome, bằng cách sử dụng eval, nhưng không có trong Firefox. – gilrain

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