2013-05-04 8 views
6

Tôi đang cố gắng thực hiện một số AJAX và cần biết tại sao mã này không kích hoạt cảnh báo hoàn thành hoặc lỗi. Tôi trong Mozilla Firefox 20.0.1JavaScript XMLHttpRequest.onreadystatechange

XIN LƯU Ý

Mã này cập nhật cơ sở dữ liệu (Tôi có một tuyên bố chọn đọc các bản ghi chính xác xác minh nó cập nhật) Tôi chỉ không chắc chắn là tại sao tôi không thể nhận được thông báo khi phản hồi đã hoàn tất.

Tôi có các biến GLOBAL này (ở đầu trang javascript) được khai báo.

var AjaxEnginePage; 
var ClientInfoPage; 
var XMLHTTP; 
AjaxEnginePage = "AjaxEngine.aspx"; 
ClientInfoPage="getClientInfo.aspx"; 

Tạo kết nối.

//Creating and setting the instance of appropriate XMLHTTP Request object to a “XmlHttp” variable 
function CreateXMLHTTP() 
{ 
try 
{ 
    XMLHTTP = new ActiveXObject("Msxml2.XMLHTTP"); 
} 
catch(e) 
{ 
    try 
    { 
     XMLHTTP = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    catch(oc) 
    { 
     XMLHTTP = null; 
    } 
} 
//Creating object in Mozilla and Safari 
if(!XMLHTTP && typeof XMLHttpRequest != "undefined") 
{ 
    XMLHTTP = new XMLHttpRequest(); 
} 
} 

Thắt kết nối:

function btnUpdateMe_OnClick() { 
var me = encodeURIComponent(document.getElementById("MeTextBox").value); 

// construct the URL 
var requestUrl = AjaxEnginePage + "?Action=UpdateMe&Me=" + me; 

CreateXMLHTTP(); 

// If browser supports XMLHTTPRequest object 
if(XMLHTTP) 
    { 
    //Setting the event handler for the response 
    XMLHTTP.onreadystatechange = handleStateChange(me); 

    //Initializes the request object with GET (METHOD of posting), 
    //Request URL and sets the request as asynchronous. 
    XMLHTTP.open("get", requestUrl, true); 

    //Sends the request to server 
    XMLHTTP.send(null);  
} 

Xử lý Nhà nước Thay đổi

function handleStateChange(me) { 
    switch (XMLHTTP.readyState) { 
    case 0: // UNINITIALIZED 
    case 1: // LOADING 
    case 2: // LOADED 
    case 3: // INTERACTIVE 
     break; 
    case 4: // COMPLETED 
     alert("Success"); 
     break; 
    default: alert("error"); 
} 

tôi có thể cung cấp mã hơn nếu cần thiết. . :(nhờ

+1

Với dòng này. , 'XMLHTTP.onreadystatechange = handleStateChange (me);', bạn ngay lập tức gọi 'handleStateChange' và trả về giá trị trả về của nó là' onreadystatechange' (nó trả về không có gì, vì vậy giá trị trả về là 'undefined'). 'onreadystatechange' mong đợi một tham chiếu đến một hàm. Ngoài ra, bạn chuyển 'me', nhưng bạn không sử dụng nó trong hàm' handleStateChange'. – Ian

+0

Tôi nhận ra và xin lỗi vì đã không sử dụng tôi, tôi muốn loại bỏ điều đó. – Kulingar

+0

Không cần phải xin lỗi, tôi chỉ nghĩ rằng tôi muốn chỉ ra nó. Vì nó không được sử dụng trong hàm, việc sửa lỗi của bạn trở nên dễ dàng hơn. Nếu cần, bạn phải thêm một chút nữa – Ian

Trả lời

11

Thay đổi:

XMLHTTP.onreadystatechange = handleStateChange(me); 

tới:

XMLHTTP.onreadystatechange = function() {handleStateChange(me);}; 

Bạn đang thiết onreadystatechange đến kết quả của gọi hàm, không để chức năng