OperaのXmlHttpRequestは、javascriptが開いているドメインでのみ機能することが知られています。 以下に、この見落としを回避する方法を示します。
データを送信して結果を得る-写真
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だけでなく;-)