2010-04-11 27 views
8

Tôi đã nhận được mã yêu cầu nhận đơn giản tới Twitter (tìm kiếm) bằng cách sử dụng phương thức Ajax của jQuery. Mã hoạt động tốt trên Safari, nhưng không thành công trên Firefox (3.6.3). Trong trường hợp Firefox, phương thức "thành công" của phương thức jQuery.ajax được gọi, nhưng dữ liệu được cung cấp là null. (. Trong Safari, tôi nhận được rất nhiều dữ liệu JSON)jQuery.ajax gọi tới Twitter thành công nhưng trả về giá trị rỗng cho Firefox

cuộc gọi Ajax của tôi là:

$.ajax({ 
    url: 'http://search.twitter.com/search.json?q='+searchTerm, 
    dataType: 'json', 
    async: true, 
    beforeSend: function(request) { 
     window.console.log('starting AJAX request to get Twitter data'); 
    }, 
    success: function(data, textStatus, request) { 
     window.console.log('AJAX request to get Twitter succeeded: status=' + textStatus); 
     callback(data); 
    }, 
    error: function(request, status, error) { 
     window.console.log('Ajax request to get user data --> Error: ' + status); 
     errback(request, status, error); 
    } 
}); 

Firebug cho thấy tiêu đề đáp ứng:

tình trạng
Date Sun, 11 Apr 2010 22:30:26 GMT 
Server hi 
Status 200 OK 
X-Served-From b021 
X-Runtime 0.23841 
Content-Type application/json; charset=utf-8 
X-Served-By sjc1o024.prod.twitter.com 
X-Timeline-Cache-Hit Miss 
Cache-Control max-age=15, must-revalidate, max-age=300 
Expires Sun, 11 Apr 2010 22:35:26 GMT 
Vary Accept-Encoding 
X-Varnish 1827846877 
Age 0 
Via 1.1 varnish 
X-Cache-Svr sjc1o024.prod.twitter.com 
X-Cache MISS 
Content-Encoding gzip 
Content-Length 2126 
Connection close 

Các HTTP là OK (200), Loại nội dung là đúng application/json và Nội dung dài 2126 (gzip'd) ngụ ý dữ liệu đã trở lại. Tuy nhiên, Firebug hiển thị Phản hồi bị trống và kiểm tra dữ liệu được cung cấp cho thấy nó là 'null'.

Tôi biết một bài đăng tương tự trên Stack Overflow, jQuery $.get() function succeeds with 200 but returns no content in Firefox và từ đó giả định vấn đề này có thể liên quan đến bảo mật tên miền chéo, nhưng ... Tôi biết có nhiều tiện ích JavaScript và Ajax dữ liệu từ Twitter. Có cái gì tôi cần phải kích hoạt để cho phép điều này?

+6

Ah, chắc chắn là một vấn đề với chính sách bảo mật tên miền chéo. Đã thêm "& callback =?" với yêu cầu GET và tất cả hiện đang hoạt động. – Zhami

+0

Bạn có thể cập nhật bài đăng gốc của mình bằng cách thêm tùy chọn gọi lại không? - Cảm ơn! –

+2

@Zhami: Nếu bạn trả lời, bạn nên đăng giải pháp của mình dưới dạng Trả lời ở đây. –

Trả lời

2

Bạn đang cố thực hiện cuộc gọi Ajax tên miền chéo. Để điều này xảy ra, bạn cần sử dụng JSONP.

JQuery hiểu JSONP và nó sẽ xử lý tất cả các thủ thuật cơ bản cho bạn.

Bạn chỉ cần thêm thông số & gọi lại =? vào URL và JQuery sẽ thực hiện yêu cầu dưới dạng cuộc gọi tên miền chéo. Quan trọng hơn là, nó sẽ hiểu và xử lý phản hồi JSONP từ máy chủ, vì vậy cho bạn nó sẽ được minh bạch.

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