有一个程序是用ajax异步调用的,程序在我本机上运行一切正常,当部署到服务器上面后,返回的状态码老是等于0,即xmlhttprequest.status = 0 。我上网查了一下,很多人都说是因为ajax访问的是本地文件的原因。但我的程序明明访问的是web服务器上的jsp。而且在本机也是运行顺利的。十分不解。请达人相助!

解决方案 »

  1.   

    function send_request(url) {//初始化、指定处理函数、发送请求的函数
       http_request = false;
       //开始初始化XMLHttpRequest对象
       if(window.XMLHttpRequest) { //Mozilla 浏览器
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {//设置MiME类别
         http_request.overrideMimeType('text/xml');
        }
       }else if (window.ActiveXObject) { // IE浏览器
        try {
         http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
         try {
          http_request = new ActiveXObject("Microsoft.XMLHTTP");
         } catch (e) {}
        }
       }
      
       if (!http_request) { // 异常,创建对象实例失败
        window.alert("不能创建XMLHttpRequest对象实例.");
        return false;
       }
       http_request.onreadystatechange = processRequest;
      
       http_request.open("post", url, true);
       http_request.send(null);
     } function processRequest() {
      // only if req shows "loaded"

      if (http_request.readyState == 4) {
    // only if "OK"
    alert("status"+http_request.status);

    if (http_request.status == 200) {

       //alert(http_request.responseText).Trim();
       var temp = http_request.responseText.Trim();

        .................
                ................   }
        }

    ajax发送的目标是一张jsp页面,jsp做了一些逻辑判断,如果验证成功的话,jsp最后的一行代码执行如下操作:
           response.sendRedirect(next_url.toString());
          //next_url 是其他机上的应用,他会根据请求的url进行判断。然后返回相应的提示内容。如"OK","Error"等
    现在问题就是在转发上,我在本机上跑的话。页面接到的返回状态是200,且能得到相应的提示内容"OK" or "Error"。但如果我把程序原封不动的部署到服务器上面。等到的返回状态码是0。即:http_request.status = 0 。返回的内容为""空。
      

  2.   

    贴出代码来还是有用的.
    出现这种情况的原因可能是LZ尚未将XMLHttp对象初始化就调用了,初始化不是实例化,把open和onreadystatechange换一个位置试试看.
      

  3.   

    按你说的改了,改后的代码如下
    function send_request(url) {//初始化、指定处理函数、发送请求的函数 
      http_request = false; 
      //开始初始化XMLHttpRequest对象 
      if(window.XMLHttpRequest) { //Mozilla 浏览器 
      http_request = new XMLHttpRequest(); 
      if (http_request.overrideMimeType) {//设置MiME类别 
        http_request.overrideMimeType('text/xml'); 
      } 
      }else if (window.ActiveXObject) { // IE浏览器 
      try { 
        http_request = new ActiveXObject("Msxml2.XMLHTTP"); 
      } catch (e) { 
        try { 
        http_request = new ActiveXObject("Microsoft.XMLHTTP"); 
        } catch (e) {} 
      } 
      } 
      
      if (!http_request) { // 异常,创建对象实例失败 
      window.alert("不能创建XMLHttpRequest对象实例."); 
      return false; 
      } 
      
     http_request.open("post", url, true);   http_request.onreadystatechange = processRequest; 
      
       http_request.send(null); 

    可还是不行。跟这个有关系吗?有个现象我必须跟你强调一下,我在本机上跑没出过问题。
    其他ajax跟这个一样编码的验证也不会出问题。