2013-05-04 9 views
6

Próbuję wykonać niektóre AJAX i muszę wiedzieć, dlaczego ten kod nie uruchamia zakończonego lub błąd powiadomienia. Jestem w Mozilla Firefox 20.0.1JavaScript XMLHttpRequest.onreadystatechange

UWAGA

Ten kod JEST aktualizowanie bazy danych (Mam select czytanie dokładną weryfikacją rekord to uaktualnienie) Jestem nie jestem pewien, dlaczego nie mogę uzyskać ostrzeżenia po zakończeniu odpowiedzi.

Mam te GLOBALNE (u góry strony javascript) zadeklarowane zmienne.

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

Tworzenie połączenia.

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

Wiązanie połączenia:

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

Handle State Zmień

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

mogę zapewnić więcej kodu w razie potrzeby. . :(dzięki

+1

Z tej linii. , 'XMLHTTP.onreadystatechange = handleStateChange (me);', od razu wywołujesz 'handleStateChange' i zwracasz jego wartość zwracaną do' onreadystatechange' (nic nie zwraca, więc zwracana jest wartość 'undefined'). 'onreadystatechange' oczekuje odniesienia do funkcji. Ponadto przekazujesz 'me', ale nie używasz go w funkcji' handleStateChange'. – Ian

+0

Zdaję sobie sprawę i przepraszam za nieużywanie mnie, chciałem to usunąć. – Kulingar

+0

Nie trzeba przepraszać, po prostu myślałem, że to wskażę. Ponieważ nie jest używany w funkcji, łatwiej jest naprawić problem. Jeśli byłaby potrzebna, musisz dodać trochę więcej – Ian

Odpowiedz

11

Zmiana:

XMLHTTP.onreadystatechange = handleStateChange(me); 

do:

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

Ty ustawienie onreadystatechange do wyniku wywołania funkcji, a nie do funkcji