データを送信して結果を得る-写真
XmlHttpRequestの代わりに別のホストに情報を送信するには、別のドメインからサーバースクリプトを読み込む画像を作成する単純なDOMを使用します。 結果は画像になります。 以下は、サードパーティのサーバーにのみデータを送信するスクリプトの例です。
//テストする 関数postDataImage(addr){ //新しい画像を作成します var img = document.createElement( "img"); img.src = addr; //結果をユーザーに表示したい場合、 //次に、この画像をドキュメントに接続します document.getElementById( "result")。appendChild(img); } //この方法でajaxリクエストの「類似性」を実行します postDataImage( "http://your.domain.com/serverside.image.php");
その結果、画像が得られました。たとえば、「クリック」された画像を置き換えることができます。 データを送信するだけの場合は、ドキュメントから画像を完全に省略できます。 しかし、他の結果はどうですか?
結果が数値の場合
前述のように、Operaの写真には問題がなく、どのドメインからでも要求されます。 私たちだけが十分な画像を持っていないので、番号(たとえば、ユーザーID)を教えてください。 数字が小さい場合は、おそらく解決できます。 たとえば、サーバーから受け取った写真のサイズを考えてみましょう。幅* 256 +高さにより、0〜65535または-32767〜32767の数字を表示できます。このサイズのJPEG画像は重くなりません。
次に例を示します。スクリプトはSuccess!に応答します。 サーバーから受信した画像の幅が290ピクセルの場合。
// 2つのテスト 関数postDataImageAndProcess(addr){ //メッセージLoading ...を表示します document.getElementById( "result")。innerHTML = "読み込み中..."; //画像を作成します var img = document.createElement( "img"); img.src = addr; //画像の読み込み時にトリガーを設定します img.onload = function(){ //画像が読み込まれたら、その幅を確認します // 290ピクセルの場合、すべてが正しい var result =(this.width == 290)? 「成功、画像幅290px!」 : 「その他の結果!画像の幅は290ピクセルではありません」; document.getElementById( "result")。innerHTML = result; } } //この方法でajaxリクエストの「類似性」を実行します postDataImageAndProcess( "http://your.domain.com/serverside.image.php");
紳士、これは私の中で成熟した工学の進化を説明しています。 そして、私は最も興味深いことになりました。 結局のところ、サーバーに対して通常のリクエストを作成し、そこから通常の応答を取得する方法は次のとおりです。テキスト、データの配列、または他の何か。 私はあなたにこの質問をしたかったのですが、ところで、私は考え直して、自分で記事を完成させました(考えるのに役立つことが判明しました;)
最後に、完全なリクエスト/レスポンス
srcパラメーターを持つ他のタグを覚えていますか? <スクリプト>! そして、私たちは手順を混乱させ始めます:
//テスト3 関数postDataScript(addr){ //メッセージLoading ...を表示します document.getElementById( "result")。innerHTML = "読み込み中..."; //オブジェクトを作成します var awesome = document.createElement( "script"); awesome.src = addr; document.getElementsByTagName( "head")[0] .appendChild(素晴らしい); } //この方法でajaxリクエストの「類似性」を実行します postDataImageAndProcess( "http://your.domain.com/serverside.javascript.php");
serverside.javascript.phpにはヘッダーが含まれます(「Content-type:text / javascript」); そしてもちろん、結果がキャッシュされないようにすべての属性、およびjavascriptが本文に書き込まれます。 たとえば、ドキュメントの結果セルの内容を変更する行を追加します。
document.getElementById( "result")。innerHTML = "はい、機能します";
以上です。 どんなことがあっても、AJAXが最もわかりました。
すべてのアクションはOpera 9.61で実行され、調査対象はクロスドメインAJAXリクエストであり、Operaでは標準で禁止されていることを明確にします。 このトピックは使い果たされたものとはほど遠いもので、まだ考えるべきことがあります:
-クロスドメインリクエスト専用の、MSXMLHTTPなどの一連の関数を使用してライブラリを作成します。
-POSTメソッドを使用してリクエストを行うのと同じ方法でOperaを指導します(これは可能ですか?フォームを介して)
-提案...;)
実際の例はこちら: www.blackcrystal.net/labs/operacrossdomainrequest/test.html
テスト用のサーバースクリプトはこちら: www.blackcrystal.net/labs/operacrossdomainrequest
サンプル(htmlファイル)をダウンロードし、localhostで開いてテストできます。 サーバーへのリクエストは時計仕掛けのように機能します。 そしてOperaだけでなく;-)