2013-04-06 431 views
0

我正在尝试编写一个类似于javaScript插件的Google广告。我不能使用jQuery ajax,因为它应该适用于所有网站。 这是我的JavaScript代码。XMLHttpRequest状态4但responseText为空

var ajaxRequest; // The variable that makes Ajax possible! 

try{ 
    // Opera 8.0+, Firefox, Safari 
    ajaxRequest = new XMLHttpRequest(); 
} catch (e){ 
    // Internet Explorer Browsers 
    try{ 
     ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP"); 
    } catch (e) { 
     try{ 
      ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
     } catch (e){ 
      // Something went wrong 
      alert("Your browser broke!"); 
      return false; 
     } 
    } 
} 
// Create a function that will receive data sent from the server 
ajaxRequest.onreadystatechange = function(){ 
    if(ajaxRequest.readyState == 4){ 
     alert(ajaxRequest.responseText); 
     console.log('xhr',ajaxRequest) 
    } else { 
     //alert(ajaxRequest.readyState); 
     //alert(ajaxRequest.responseText); 
    } 
} 
    var project_path = "http://www.domainname.com/"; //for stackoverflow, using right path in live code. 
var req_url = project_path + "ads/verifypublisher/"; 
ajaxRequest.open("GET", req_url, true); 
ajaxRequest.send(null); 

这里是我的PHP文件看起来像,

echo("<b>hi:</b> "); 
exit(); 

是的,这就是我的一切存在。仍然responseText是空的。我在这里错过了什么?

+0

不能使用jQuery,这应该是纯JS。这是要求。 – sulmanpucit 2013-04-06 19:29:10

回答

1

警报(req_url)应显示错误的URL“http://www.domainname.comads/verifypublisher/

+0

网址是好的,如果我在浏览器中打开它,它也显示我的回应。这是在quesion输入错误。我会纠正它。谢谢。 – sulmanpucit 2013-04-06 19:26:38

+0

可能你正在提出跨站请求?即从域A向域B发出请求的脚本。 – sapelov 2013-04-06 19:32:47

+0

不,也不是这种情况。该代码位于同一台服务器上,并使用相同的域进行访问。 – sulmanpucit 2013-04-06 19:35:44

0

这是更好地与响应做任何事情之前,为了确保状态代码为200。那么你可以更早地发现问题。

+0

状态码是200.我也检查过。 – sulmanpucit 2013-04-06 19:28:34

+0

这个问题一定在你的php代码上。你的PHP代码和你如何在你的问题中完全一样? – 2013-04-06 19:31:14

+0

是的,它的100%相同。 – sulmanpucit 2013-04-06 19:32:48

0

尝试这在我的测试中大多数工作的浏览器

var responseText=function(e,doing){ 
        if (e.readyState== 4) { 
          if(doing)doing(e); 
          return(e.responseText);    
        }; 
        if (e.readyState == 200) { 
          if(doing)doing(e);    
          return(e.responseText); 

        }; 
        return false;     
}; 
function loadXMLPostDocf(url,method,posData,uploadProgress,uploadComplete,uploadFailed,uploadCanceled,statechange,CallBackOnSend) { 
    var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP","Microsoft.XMLHTTP"]; 
// branch for native XMLHttpRequest object 
if (window.XMLHttpRequest && checkVersion()) { 
    pos = new XMLHttpRequest(); 
    pos.open(method, url, true); 
    //pos.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
    if(statechange!=''){pos.onreadystatechange = statechange;}; 
    try{ 
     if(uploadProgress!='')if(pos.upload){ 
      pos.upload.addEventListener("progress", uploadProgress, true); 
     }else{ 
      pos.addEventListener("progress", uploadProgress, true); 
     } 
     if(uploadComplete!='')pos.addEventListener("load", uploadComplete, false); 
     if(uploadFailed!='')pos.addEventListener("error", uploadFailed, false); 
     if(uploadCanceled!='')pos.addEventListener("abort", uploadCanceled, false); 
    }catch(e){ 

    } 

    pos.send(posData); 
    if(CallBackOnSend)CallBackOnSend(pos); 
    //console.log(pos.abort()); 
// branch for IE/Windows ActiveX version 
} else if (window.ActiveXObject) { 
     for (var i=0; i < arrSignatures.length; i++) { 
        try { 
         pos = new ActiveXObject(arrSignatures[i]); 

        } catch (oError) { 
         //ignore 
        }; 
      }; 
    if (pos) { 
     pos.open(method, url, false); 
     //pos.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
     if(!statechange){pos.onreadystatechange = statechange;}; 
     if(!uploadComplete){pos.onreadystatechange = uploadComplete;}; 
     // if(uploadProgress!='')pos.upload.addEventListener("progress", uploadProgress, true); 
     //if(uploadComplete!='')pos.addEventListener("load", uploadComplete, false); 
     //if(uploadFailed!='')pos.addEventListener("error", uploadFailed, false); 
     //if(uploadCanceled!='')pos.addEventListener("abort", uploadCanceled, false); 
     pos.send(posData); 
     if(CallBackOnSend)CallBackOnSend(pos); 
    }; 
}; 
return(pos); 
}; 

样本:

var complete=function(e){ 
    var Body=responseText(e.target); 
    console.log(Body); 
}; 
var uploadProgress=function(evt){ 

}; 
var uploadComplete=function(evt){ 
    if(evt.target.status==200 || evt.target.status==304){ 
     var Body=responseText(evt.target); 
     console.log(Body); 
    }else{ 
     return false; 
    }; 
}; 
var uploadFailed=function(evt){ 

}; 
var uploadCanceled=function(evt){ 

}; 
var CallBackOnSend=function(evt){ 

}; 
loadXMLPostDocf("http://domain.com/index.php","GET",null,uploadProgress,uploadComplete,uploadFailed,uploadCanceled,complete,CallBackOnSend); 
+0

false和由console.log(Body)记录的空字符串; – sulmanpucit 2013-04-06 20:01:23

+0

你可以把你的测试的'url'? – 2013-04-06 20:13:49

0

我的问题相似,这是通过检查我的html代码解决。我在表单提交按钮的方法中有一个onclick处理程序。像这样:onclick="sendFalconRequestWithHeaders()"。这个方法又会像你一样调用ajax,并且做我想要的。但并非如预期的那样,我的浏览器没有任何回报。

someone's hardwork了解到,我已经在这个处理程序中返回了错误并解决了。 让我提到,在到达这篇文章之前,我花了整整3天的周末和半天时间在办公室编写代码实现CORS filters,jetty config,其他jersey and embedded jetty相关的东西 - 只是为了解决这个问题,围绕着我的所有理解围绕cross domain ajax requests和标准的东西。在javascript中简单的错误让你愚蠢是荒谬的。

现在我必须清理我的代码,干净地提交git补丁。感谢那个人。

相关问题