2013-05-04 15 views
6

我正在尝试做一些AJAX,并且需要知道为什么这段代码没有触发完成或错误警报。我在Mozilla Firefox 20.0.1JavaScript XMLHttpRequest.onreadystatechange

请注意

此代码IS更新数据库(我有一个select语句读取验证它的更新的确切记录)我只是不确定为什么在响应完成时我无法获得警报。

我有这些GLOBAL(在JavaScript页面的顶部)声明的变量。

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

创建连接。

//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(); 
} 
} 

绑连接:

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);  
} 

处理状态更改

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"); 
} 

,如果需要,我可以提供更多的代码。 。:(感谢

+1

这条线。 ,'XMLHTTP.onreadystatechange = handleStateChange(me);',你立即调用'handleStateChange'并将其返回值返回给'onreadystatechange'(它什么都不返回,所以返回值是'undefined')。 'onreadystatechange'需要引用一个函数。另外,你传递'me',但是你不会在'handleStateChange'函数中使用它。 – Ian 2013-05-04 00:33:08

+0

我意识到并且为不使用我而道歉,我的意思是将其删除。 – Kulingar 2013-05-04 01:26:12

+0

不需要道歉,我只是想我会指出来。由于它不在函数中使用,因此修复问题更容易。如果需要的话,你必须增加一点 – Ian 2013-05-04 03:08:21

回答

11

变化:

XMLHTTP.onreadystatechange = handleStateChange(me); 

到:

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

你设置onreadystatechange来调用该函数,而不是函数的结果