7

イベントにイベント ハンドラーが関連付けられているページがありますonclickGETイベントが発生すると、テキストボックスの内容がリクエストに渡されます。URLが同じドメインにないため、スクリプトタグを作成し、このようにURLをソースに添付します

elem.onclick=fire;

function fire()
{
var text=document.getElementById('text').value;
var script=document.createElement("script");
script.className="temp";
script.src="some url"+"?param="+text;
document.body.appendChild(script);
}

そのイベントが発生し、複数回前のGETリクエストをすべてキャンセルしたい場合(まだ応答を受信して​​いる可能性があるため)、GET最新のテキストでリクエストを行います。しかし、これには以前のリクエストをキャンセルする必要があります。私は試した

document.body.removeChild(script);
script.src=null;

しかし、これは では機能しませんFirefox(私は を使用してFirefox 5います)Google Chrome


更新 Alfred が提案したように、以前window.stopはリクエストをキャンセルしていましたが、リクエストをキャンセルせずに電話を切りました。これは、firebug を調べると、リクエストが行われているように見えますが、応答がないことを意味します。

4

5 に答える 5

4

解決策は簡単です。HTTP リクエストを作成するには、要素<img>の代わりに使用します。また、同じ要素の属性<script>を常に変更する必要があります。src

var img;
function fire()
{
    var text = document.getElementById('text').value;
    var im = img || (img = new Image());
    im.src = "url"+"?param="+text;
}

次のようにして、実際に機能することを確認することができます: リクエストする URL は、非常に長い応答時間を必要とします (たとえば、PHP のsleep関数を使用してこれを確認できます)。次に、Firebug で [Net] タブを開きます。ボタンを複数回クリックすると、未完了のリクエストがすべて中止されることがわかります。

于 2011-08-01T08:49:23.667 に答える
2

これは完全にヒップからの撮影ですが、スクリプト タグの読み込みが完了していない場合は、おそらく単純にscript.parentElement.removeChild( script ). とにかく、それは多かれ少なかれ mootools が行うことです。(技術的には、first に置き換え/\s+/られ' 'ますが、それほど重要ではないようです)。

于 2011-07-29T14:32:42.000 に答える
1

これがあなたが探しているものかどうかはわかりませんが、同様の問題のようです: http://www.velocityreviews.com/forums/t506018-how-to-cancel-http-request-from-javascript .html

于 2011-07-28T21:02:24.033 に答える
1

JS フレームワークを使用してもよろしいですか?その場合、MooTools にはこの機能がRequest.JSONPオブジェクトに組み込まれています。

于 2011-07-28T21:05:16.523 に答える
0

クロスドメインの問題を回避するには、代わりに CORS を使用できる場合があります (サーバー上の内容を変更できると仮定します): http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-コルス/

これを行うと、より標準的な XMLHttpRequest の abort() 関数を使用できます。

CORS は、Opera (http://caniuse.com/cors) を除くすべての主要な最新ブラウザーと互換性があります。

于 2011-08-08T09:04:00.197 に答える