2011-10-22 110 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!