jQuery ajax関数にはxhrオプションがあります。誰かがこのオプションの詳細、使いやすさ、またはサンプルの使い方を知っていますか?jQuery ajax()オプション - xhr
答えて
のこの機能を使用しない何をしているのか知っている限り。
xhr
オプションを使用すると、ajax()
コールで舞台裏で使用されるXMLHttpRequestオブジェクトを作成するための独自のコールバックを定義できます。ほとんどすべての場合、このオプションを指定する必要はありません。
http://api.jquery.com/はあなたの友達です。そのサイトからajax()コマンドを検索するとき:
xhr(機能):XMLHttpRequestオブジェクトを作成するためのコールバック。使用可能な場合はActiveXObject(IE)、それ以外の場合はXMLHttpRequestになります。 XMLHttpRequestの独自の実装、またはファクトリの拡張機能を提供するためにオーバーライドします.jQuery 1.2.6およびそれ以前のバージョンでは使用できません。
一般
、あなたはあなたが本当にsomeone does know、実際には$アヤックス()関数
はい、この機能ではもっと深く学ぶことがポイントでしたが、ここでは十分に親切ではありませんでした。 Sujalはそれを明確にした。 –
私は、これは古い、古い質問ですけど、私はこのために検索し、次の人が、何が起こっているのか理解してこれを投稿したいました。この機能のために
、あなたのブラウザのための適切なXHRオブジェクトを返すようにしたいです。デフォルトの動作は、XMLHTTPRequestまたはIE相当のものを使用することです。ここではデフォルトの動作です:
jQuery.ajaxSettings.xhr = window.ActiveXObject ?
/* Microsoft failed to properly
* implement the XMLHttpRequest in IE7 (can't request local files),
* so we use the ActiveXObject when it is available
* Additionally XMLHttpRequest can be disabled in IE7/IE8 so
* we need a fallback.
*/
function() {
return !this.isLocal && createStandardXHR() || createActiveXHR();
} :
// For all other browsers, use the standard XMLHttpRequest object
createStandardXHR;
これら2メソッドcreateStandardXHR
を作成し、createActiveXHR
は、基本的に、我々はすべて知っていた基本的なXHRの作成メソッドをコールし、年間愛さ。ここcreateStandardXHRです:あなたはこれを上書きしたい場合
function createStandardXHR() {
try {
return new window.XMLHttpRequest();
} catch(e) {}
}
ので、あなたは、単にnew XMLHttpRequest()
オブジェクトを返す独自の関数に渡すことができます。
なぜこれをやりたいですか?たとえば、クロスドメインHTTPリクエストを作成する必要があり、IFRAMEシムを使用してdocument.domain
を使用して動作させる場合、同じ発信元ルール内で作業するとします。これは、あなたが話したいドメインに基づいて正しいフレームからXHRオブジェクトをJavaScriptにロードさせるための良い方法です。
Twitter.comではこの手法を使用しています。
JavaScriptがhttp://twitter.com/上で実行されますが、データがhttp://api.twitter.comです。彼らは単にdocument.domain
を"twitter.com"
に設定するapi.twitter.comを指すIFRAMEを作成します。メインページのdocument.domain
から"twitter.com"
にも設定されています。
HTTPリクエストを作成するときに、彼らのJSは、ちょうどIFRAMEの代わりのメインページから、それを作成します。同じ起点のポリシーを通じてそれらを取得します。
あなたは$アヤックス()へのXHRオプションでこれを行うことができます。メインページとiframeの両方が同じ値にそのdocument.domain
を設定している限り動作します
$.ajax({url: "http://api.myapp.com", xhr: function(){
return new ($('#my_api_iframe')[0].contentWindow.XMLHttpRequest)();
}, success: function(html) {
// format and output result
}
});
:ここでは、スニペット(http://myapp.comでページ上で実行されているこのコードを想像しては)です。(これはちょっとした例です。私は不正行為をして標準のXMLHttpRequestオブジェクトしか使用しないため、IEの一部のバージョンでは動作しません - 修正する必要があります)。
(追加するには、編集:これは古いブラウザのために必要な技術である - 最も近代的なブラウザでCORSサポートは、これが不要になるだろう)
Sujal
あなたの遅い投稿をありがとう、それは良い説明になります –
別の後半の答えが、以下のコードは、良い例ですあなたがxhrオプションを無効にするときにできることのThis is taken from Ben Nolan's blog xhr getの進行状況を追跡することができます。大規模なjsonデータセットをロードするときにプログレスバーを作成するためにこれを使用しました。それは私にトンを助けた。
interval = null
$.ajax {
url : "endpoint.json"
dataType : 'json'
xhr :() =>
xhr = jQuery.ajaxSettings.xhr()
interval = setInterval(=>
if xhr.readyState > 2
total = parseInt(xhr.getResponseHeader('Content-length'))
completed = parseInt(xhr.responseText.length)
percentage = (100.0/total * completed).toFixed(2)
console.log "Completed #{percentage}%"
, 50)
xhr
complete: ->
clearInterval(interval)
success : (data) =>
alert(data)
}
あなたはCoffeeScriptの代わりにJavaScriptでこの答えを提供する可能性がありますか? – pydanny
@pydannyチェックアウトhttp://js2coffee.org/ –
はい、それほど役に立ちません。 –
不明な点がある場合は、まずAPIにアクセスしてください。 –
本当に...?これはかなり悲しい試みです... [編集:このEDITセクションを追加することで、私のコメントは少し参考になります。 – SgtPooki