0

JavaScript プラグインのような Google 広告を作成しようとしています。すべてのサイトで正常に動作するはずなので、jQuery ajax を使用できません。これが私のJavaScriptコードです。

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 は空です。ここで何が欠けていますか?

4

4 に答える 4

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);
于 2013-04-06T19:40:30.563 に答える
0

これに似た私の問題は、html コードをチェックすることで解決されました。onclickメソッドへのフォーム送信ボタンにハンドラーがありました。このように: onclick="sendFalconRequestWithHeaders()". このメソッドは、あなたと同じように ajax を呼び出し、私が望むことを行います。しかし、予想通りではありませんでした。ブラウザから何も返されませんでした。

誰かの苦労から学び、このハンドラで false を返し、解決しました。この投稿にたどり着く前に、私は 3 日間の週末と半日をオフィスで過ごし、CORS filtersjetty config、その他のjersey and embedded jetty関連するものを実装するコードを書きました - これを修正するためだけにcross domain ajax requests. JavaScript の単純なミスで頭がおかしくなるのはばかげたことです。

ここで、コードをクリーンアップして、git パッチをクリーンに送信する必要があります。あの人のおかげです。

于 2013-11-25T08:49:29.750 に答える