2009-04-15 52 views
9

Tôi đang cố gắng để chức năng này hoạt động, yêu cầu tham số url sau đó gửi responseText đến callback là một hàm.Ajax sẽ không vượt qua readyState 1, tại sao?

Dường như nó chỉ được chuyển đến readyState 1 (nhờ các lệnh Firebug).

Ở đây là:

function Request(url, callback){ 
if (window.XMLHttpRequest) { // Mozilla, Safari, ... 
    httpRequest = new XMLHttpRequest(); 
} else if (window.ActiveXObject) { // IE 
    httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
} else{ 
    return false; 
} 
httpRequest.onreadystatechange = function(){ 
    console.log(httpRequest.readyState); 
    if (httpRequest.readyState == 4) { 
     callback(httpRequest.responseText); 
    } 
}; 
console.log(httpRequest, url); 
httpRequest.open('GET', url, true); 
httpRequest.send(null); 
} 
+0

Xin chào Joe, tôi quan tâm giải pháp của bạn là gì? Bạn đã tìm thấy một? Cách giải quyết của tôi cho prob này là gán sự kiện onload thay vì onreadystatechange (xem chi tiết bên dưới trong câu trả lời). –

+0

i dunno .... xin lỗi tôi đã không được trên trang web trong một thời gian. nó cũng làm việc nhưng tôi chỉ chuyển sang jQuery và nó hoạt động đúng. – kennyisaheadbanger

Trả lời

3

tôi workarounded vấn đề này gán sự kiện onload thay vì onreadystatechange:

function Request(url, callback){ 
if (window.XMLHttpRequest) { // Mozilla, Safari, ... 
    httpRequest = new XMLHttpRequest(); 
} else if (window.ActiveXObject) { // IE 
    httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
} else{ 
     return false; 
} 

var readyStateChange = function(){ 
    console.log(httpRequest.readyState); 

    if (httpRequest.readyState == 4) { 
       callback(httpRequest.responseText); 
    } 
}; 


if (isFirefox && firefoxVersion > 3) { 
    httpRequest.onload = readyStateChange; 
} else { 
    httpRequest.onreadystatechange = readyStateChange; 
} 

console.log(httpRequest, url); 
httpRequest.open('GET', url, true); 
httpRequest.send(null); 
} 
+0

Bàn điều khiển lỗi: Tham chiếu không bắt buộcLỗi: isFirefox không được xác định –

1

Có thể yêu cầu Ajax không trả lại dữ liệu (như vậy, lỗi máy chủ phụ của một số loại). Hãy thử bật tùy chọn 'hiển thị XMLHttpRequests' trong bảng điều khiển firebug, để kiểm tra điều này.

+0

Vâng, nó đã được bật và tôi đăng nhập vào đối tượng http và kiểm tra nó cho tôi readyState 4, nhưng sự kiện này không được gọi. Ngoài ra trang trả về dữ liệu đúng cách – kennyisaheadbanger

+0

oh! nó hoạt động trong safari nhưng không phải firefox! đó là rất lạ – kennyisaheadbanger

+0

Đã thử đăng nhập chức năng lib xmlHTTP của riêng tôi trong FF, không thành vấn đề. Trong trường hợp của tôi, tôi sử dụng => if (httpRequest.readyState <4) {console.log (...);} else { [exec the callback]}. – KooiInc

2

Kiểm tra xem URL được đề cập có thực sự phản hồi bằng cách truy cập trực tiếp URL đó trong trình duyệt hay không.

Thử nghiệm với một trình duyệt khác để bạn nhận được kết quả tương tự.

Sử dụng một số hình thức giám sát HTTP để xem khách hàng để nói chuyện máy chủ (yêu thích của tôi là Fiddler)

0

Tôi cũng phải đối mặt với cùng một vấn đề. Bằng cách đọc url dưới đây, tôi đã được giải quyết.

http://bytes.com/topic/javascript/answers/548442-ajax-readystate-1-wall

về cơ bản, khi tôi gán chức năng của tôi như là người nghe sự kiện cho httpRequest.onreadystatechange, tôi không thể vượt qua bất kỳ biến với nó. Vì vậy, tôi phải nhúng biến bên trong chuỗi HTTP POST vào phần cuối của máy chủ, sau đó lấy lại nó từ phản hồi HTTP.

Nó hoạt động tốt cho FF 3. Không cần sử dụng jQuery.

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