2011-10-22 106 views
0

您好,我正在使用提交給C++ cgi程序的ajax。我遇到的問題是readyState總是1.我不明白我做錯了什麼。Ajax readyState總是等於1

var asyncRequest; // XMLHttpRequest object 

    try 
     { 
      asyncRequest = new XMLHttpRequest(); 

      // Register event handler 
      asyncRequest.onreadystatechange = StateChange; 

      // Prepare to post data to URL asynchronously 
      asyncRequest.open("POST", "save_vote.cgi", true); 

      //Data to be sent to cgi program 
      postData="star=1&movie=test"; 


      // Set the appropriate HTTP request headers 
      asyncRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
      asyncRequest.setRequestHeader("Content-length", postData.length); 

      // Make request 
      asyncRequest.send(postData); 

     } 
     catch (exception) 
     { 
      alert("Request failed: " + exception.message); 
     } 

} 
function StateChange() 
{ 

    // Make sure request has completed with 200 OK status 

    //alert(asyncRequest.status) 
    if (asyncRequest.readyState == 4 && asyncRequest.status == 200) 
    { 
     alert("Hello"); 
    } 

} 

這裏是CGI程序

#include "cgi.h" 
#include <fstream> 
    int main() 
{ 
    cout << "Content-type: text/html\n\n"; 

    ParseInputParameters(); 

    ofstream fout; 

    if (fout.fail()) 
    { 
     cout << "CGI Error - Couldn't open file for appending for appending."; 
     return 0; 
    } 


    //message to be sent back in the response text 
     cout << "OK"; 

    fout.close(); 

    return 0; 
} 
+0

顯示的代碼是否爲EXACT代碼? 'var asyncRequest;'之前有什麼?如果它是一個函數,'asyncRequest'變量被私有包裝,''ReadyState(){}''中的'asyncRequest'變量不代表預期的XHR對象。 –

+0

是的,它在一個名爲ajaxUpdate的函數中。之前沒有太多的功能名稱。那麼在readyState函數中代表asyncRequest變量的解決方案是什麼? –

回答

1

移動的SateChange函數其中XHR正在取得所述函數的主體。在此修改之後,StateChange內部的asyncRequest將等於相關的asyncRequest對象。

function ajaxUpdate(){ 
    .... 
    var asyncRequest; // XMLHttpRequest object 
    try { 
     asyncRequest = new XMLHttpRequest(); 
     .... 
     asyncRequest.send(postData); 
    } 
    catch (exception){ 
     alert("Request failed: " + exception.message); 
    } 

    //} <---Removed curly bracket 
    function StateChange(){ 

     // Make sure request has completed with 200 OK status 

     //alert(asyncRequest.status) 
     if (asyncRequest.readyState == 4 && asyncRequest.status == 200){ 
      alert("Hello"); 
     } 
    } 

} //<--Added curly bracket!