2016-10-29 4 views
0

jqueryを使わずに外部のPHPファイルにデータを送信するスクリプトを作成しました。私も何をしたいのかjqueryを使わずにブラウザのタブを閉じて、データをPHPファイルに送信します。

<script type="text/javascript"> 
var statsPage = 'http://www.my-url.com/response.php'; 

function ca(c,o,n,t,e,t,u){return p={type:c,userid:o,gender:n}} 

ca("pageview", "1", "male"); 


var params = Object.keys(p).map(function(k) { 
    return encodeURIComponent(k) + '=' + encodeURIComponent(p[k]) 
}).join('&') 

const req = new XMLHttpRequest(); 
//req.addEventListener('load' /*callback after req is complete*/); 
req.open('GET', statsPage + '?' + params); 
req.send(); 

req.onreadystatechange = function() { 
    if (req.readyState == XMLHttpRequest.DONE) { 
     alert(req.responseText); 
    } 
} 
</script> 

は、ブラウザのタブを閉じたときにデータを送信することですので、私は以下のようなスクリプトを書きましたが、それは動作しません。私はここでPHPファイルからの応答を取得しません。

navigator.sendBeacon = navigator.sendBeacon || function() { 
    var xhr = new XMLHttpRequest(); 

    xhr.open('GET', 'http://www.my-url.com/response.php?pag_title=1'); 
    xhr.send(); 

xhr.onreadystatechange = function() { 
    if (xhr.readyState == XMLHttpRequest.DONE) { 
     alert(xhr.responseText); 
    } 
} 
}; 

私もこのスクリプトが見つかりましたが、それは、アラートとしてもresponse.phpファイルからの応答を私に与えていない:

window.onbeforeunload = function() { 
var xhr = new XMLHttpRequest(); 
xhr.open('GET', 'http://www.my-url.com/response.php?pag_titel=1', true); 

// If specified, responseType must be empty string or "text" 
xhr.responseType = 'test'; 

xhr.onload = function() { 
    if (xhr.readyState === xhr.DONE) { 
     if (xhr.status === 200) { 
      //console.log(xhr.response); 
      //console.log(xhr.responseText); 
      alert(xhr.responseText); 
     } 
    } 
}; 

xhr.send(null); 

    } 

EDIT

私はまた、次のテストをしましたが、今度は最初に値1のアラートボックスを与え、関数caの応答を示すアラートを返します(関数の先頭のコードの最初の部分を参照)。だから私はonbeforeunloadがここで働いていないと思う。私がブラウザのタブを閉じると、私は何も返答しません。

window.onbeforeunload = function() { 
var xhr = new XMLHttpRequest(); 
xhr.open('GET', 'http://www.digital-productions.be/dev/analytics/response.php?pag_titel=1', true); 

// If specified, responseType must be empty string or "text" 
xhr.responseType = 'test'; 

xhr.onreadystatechange = function() { 
    if (xhr.readyState == XMLHttpRequest.DONE) { 
     alert(xhr.responseText); 
    } 
} 

xhr.send(null); 

    } 
+0

問題の説明ではありません「動作していません」。実際に何が起こるのですか?ハンドラ関数が呼び出されますか?それは例外なく完了するまで実行されますか?ネットワークリクエストは送信されますか? – melpomene

+0

私はここで私の外部PHPファイルからの警告として返信を得ることはありません。私は私の質問を編集しました。 – Brecht27

+0

OK、他の質問に対する回答は何ですか? – melpomene

答えて

0

beforeunloadイベントを使用して、ユーザーがページを離れる前にコードを実行したり、保存されていない変更があることを警告したりできます。 e.returnValue = "Message";を使用してメッセージを返すことができます。ここで

window.addEventListener("beforeunload", function(e) { 
    //code   
}); 

は、Mozillaのドキュメントからのリンクです:https://developer.mozilla.org/en/docs/Web/Events/beforeunload

+0

jqueryが必要ですか?私はそれを使用したくない。メッセージを送信するのではなく、XMLHttpRequestを開始し、ブラウザのタブが閉じられたときにreponse.phpにデータを送信したい場合 – Brecht27

+0

編集した投稿を手伝ってもらえますか?私はbeforeunloadのための新しいスクリプトを書いているが、私はリフレッシュを行い、beforeunloadではなく、最初にイベントを発生させる。 addEventListenerが機能していません。私は応答がありません。 – Brecht27

+0

jqueryは不要です – Rishi

関連する問題