今回は、カスタム Ajax クロスドメイン コンポーネントのカプセル化について説明します。カスタム Ajax クロスドメイン コンポーネントのカプセル化を使用する際の 注意事項 について、実際のケースを見てみましょう。
Class.create() 分析
プロトタイプを模倣してクラス継承を作成
var Class = { create: function () { var c = function () { this.request.apply(this, arguments); } for (var i = 0, il = arguments.length, it; i <p style="text-align: left;"> ajax 定義: ZIP_Ajax=Class.create();</p><p style="text-align: left;"> create メソッドは <a href="http://www.php.cn/wiki/176.html" target="_blank">constructor</a>リクエストを返します。これは var ZIP_Ajax= function(){ と同等です。 this.request.apply(this, 引数); オブジェクトの偽装を使用して関数内で構築プロセスを実行することは、コンストラクター タスクを request メソッドに渡すことと同じです。ここで、this.request は ZIP_Ajax インスタンスのメソッドであり、this は ZIP_Ajax インスタンスを指します。そして最後に、これは実際には new キーワードに基づいて ZIP_Ajax クラスを指します。クラス ZIP_Ajax を定義すると、次にそのメソッドを定義できます: </p><p style="text-align: left;"> <strong>XMLHttp詳細な説明をリクエスト: </strong></p><p style="text-align: left;"> XMLHttpRequest はテクノロジーではなく、http プロトコルに完全にアクセスできる主流ブラウザーに組み込まれたオブジェクトです。従来の http リクエストのほとんどは、フォームの送信と http リクエストに基づいて、フォームを返します。 XMLHttpRequest は同期リクエストをサポートしていますが、最大の利点は、データを受信するための非同期送信をサポートしていることです。新しい ajax リクエストを作成すると、実際には XMLHttpRequest オブジェクトがインスタンス化されます。主なイベントとメソッドを簡単に紹介します: </p><p style="text-align: left;"> <strong>readystatechange イベント: </strong></p><p style="text-align: left;"> XMLHttpRequest が http リクエストを送信すると、readystatechange イベントがトリガーされ、0、1、2 はそれぞれ XMLHttpRequest の作成、XMLHttpRequest の初期化の完了、およびリクエストの送信を表します。終了していない (つまり、ヘッダー データのみを受信している) 4 は、完全な応答を取得する実際の方法です。 </p><p style="text-align: left;"> 返されたステータスは、サーバーから返されたステータス コードを示します: </p><p style="text-align: left;"> 一般的に使用されるものには、データが正常に返されたことを示す 200、永続的なリダイレクト (安全ではない) を示す 301、一時的なリダイレクト (安全でない) を示す 304、キャッシュされたデータの読み取り<a href="http://www.php.cn/code/9477.html" target="_blank">を示す 304、リクエストの構文エラーを示す 400、サーバーがリクエストを拒否したことを示す 403、およびサーバーがリクエストを拒否したことを示す 404 があります。 Web ページをリクエストしています。リソースが存在しません。405 は指定されたロケーション サーバーが見つかりません。408 はリクエストがタイムアウトしたことを意味します。500 サーバー内部エラーです。505 はサーバーがリクエストされた http プロトコル バージョンをサポートしていないことを意味します。 </a><a href="http://www.php.cn/wiki/96.html" target="_blank"> 200 ~ 300 は成功を示し、300 ~ 400 はリダイレクトを示し、400 ~ 500 はリクエストの内容または形式またはリクエスト本文が大きすぎてエラーが発生したことを示し、500+ は内部サーバーエラーを示します</a></p> <p style="text-align: left;">オープンメソッド: </p><p style="text-align: left;"><strong> open は 3 つのパラメータを受け取ります: </strong>リクエスト タイプ</p> (get、post、head など)、URL、同期または非同期<p style="text-align: left;"><a href="http://www.php.cn/php/php-tp-requesttype.html" target="_blank"> </a>送信方法: </p><p style="text-align: left;"><strong> リクエストの準備ができると、send メソッドがトリガーされ、送信されるコンテンツはリクエストされたデータです (get リクエストの場合、パラメーターは null です。</strong></p>) リクエストが成功すると、成功カスタム メソッドが実行され、そのパラメータは戻りデータになります。 <p style="text-align: left;">ajax クロスドメイン: </p><p style="text-align: left;"></p> クロスドメインとは何ですか? <p style="text-align: left;"><strong> 2 つのサイト www.a.com が www.b.com にデータを要求する場合、ドメイン名の不一致によってクロスドメインの問題が発生します。ドメイン名が同じであっても、ポートが異なる場合は、依然としてクロスドメインの問題が発生します (このため、js は静観することしかできません)。クロスドメインかどうかを判断するには、window.location.protocol+window.location.host を使用してクロスドメインかどうかを判断します。たとえば、http://www.baidu.com.</strong></p>。 js でクロスドメインの問題を解決する方法は何ですか? <p style="text-align: left;"></p> <p style="text-align: left;">1.document.domain+iframe</p><p style="text-align: left;"></p> メイン ドメインが同じでサブドメインが異なるリクエストの場合は、ドメイン名 + iframe を解決策として使用できます。具体的なアイデアは、2 つのドメイン名 www.a.com/a.html<p style="text-align: left;"><strong> の下に 2 つの異なる ab ファイルがある場合です。 hi.a.com/b.html と同様に、document.domain="a.com" を 2 つの HTML ファイルに追加し、a ファイルに iframe を作成して iframe の contentDocument を制御できます。 2 つのファイルについて会話することができます。例は次のとおりです: </strong></p> www.a.com の .html ファイル内 <p style="text-align: left;"></p><pre class="brush:php;toolbar:false">document.domain="a.com"; var selfFrame=document.createElement("iframe"); selfFrame.src="http://hi.a.com/b.html"; selfFrame.style.display="none"; document.body.appendChild(selfFrame); selfFrame.onload=function(){ var doc=selfFrame.contentDocument||selfFrame.contentWindow.document;//得到操作b.html权限 alert(doc.getElementById("ok_b").innerHTML());//具体操作b文件中元素 }hi.a.com の b.html ファイル内 document.domain="a.com"; 質問:
1、安全性,当一个站点(hi.a.com)被攻击后,另一个站点(www.a.com)会引起安全漏洞。2、如果一个页面中引入多个iframe,要想能够操作所有iframe,必须都得设置相同domain。
2、动态创建script(传说中jsonp方式)
浏览器默认禁止跨域访问,但不禁止在页面中引用其他域名的js文件,并且可以执行引入js文件中的方法等,根据这点我们可以通过创建script节点方法来实现完全跨域的通信。实现步骤为:
a.在请求发起方页面动态加载一个script,script的url指向接收方的后台,该地址返回的javascript方法会被发起方执行,url可以传参并仅支持get提交参数。
b.加载script脚本时候调用跨域的js方法进行回调处理(jsonp)。
举例如下:
发起方
function uploadScript(options){ var head=document.getElementsByTagName("head")[0]; var script=document.createElement("script"); script.type="text/javasctipt"; options.src += '?callback=' + options.callback; script.src=options.src; head.insertBefore(script,head.firstChild); } function callback(data){} window.onload=function(){//调用 uploadScript({src:"http://e.com/xxx/main.ashx",callback:callback}) }
接收方:
接收方只需要返回一个执行函数,该执行函数就是请求中的callback并赋参数。
3、使用html5的postMessage:
html5新功能有一个就是跨文档消息传输,如今大部分浏览器都已经支持并使用(包括ie8+),其支持基于web的实时消息传递并且不存在跨域问题。postMessage一般会跟iframe一起使用。
举例如下:
父页面:
<iframe></iframe> window.onload=function(){ document.getElementById("myPost").contentWindow.postMessage("显示我","http://www.a.com") //第二个参数表示确保数据发送给适合域名的文档 } a.com/main.html页面: window.addEventListener("message",function(event){ if(event.origin.indexOf("a.com")>-1){ document.getElementById("textArea").innerHTML=event.data; } },false) <p> <span></span> </p>
这样在父页面加载完成后main.html页面的textArea部分就会显示"显示我"三个字
ajax方法封装code:
ZIP_Ajax.prototype={ request:function(url options){ this.options=options; if(options.method=="jsonp"){//跨域请求 return this.jsonp(); } var httpRequest=this.http(); options=Object.extend({method: 'get', async: true},options||{}); if(options.method=="get"){ url+=(url.indexOf('?')==-1?'?':'&')+options.data; options.data=null; } httpRequest.open(options.method,url,options.async); if (options.method == 'post') { httpRequest.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=UTF-8'); } httpRequest.onreadystatechange = this._onStateChange.bind(this, httpRequest, url, options); httpRequest.send(options.data || null);//get请求情况下data为null return httpRequest; }, jsonp:function(){ jsonp_str = 'jsonp_' + new Date().getTime(); eval(jsonp_str + ' = ' + this.options.callback + ';'); this.options.url += '?callback=' + jsonp_str; for(var i in this.options.data) { this.options.url += '&' + i + '=' + this.options.data[i]; } var doc_head = document.getElementsByTagName("head")[0], doc_js = document.createElement("script"), doc_js.src = this.options.url; doc_js.onload = doc_js.onreadystatechange = function(){ if (!this.readyState || this.readyState == "loaded" || this.readyState == "complete"){ //清除JS doc_head.removeChild(doc_js); } } doc_head.appendChild(doc_js); }, http:function(){//判断是否支持xmlHttp if(window.XMLHttpRequest){ return new XMLHttpRequest(); } else{ try{ return new ActiveXObject('Msxml2.XMLHTTP') } catch(e){ try { return new ActiveXObject('Microsoft.XMLHTTP'); } catch (e) { return false; } } } }, _onStateChange:function(http,url,options){ if(http.readyState==4){ http.onreadystatechange=function(){};//重置事件为空 var s=http.status; if(typeof(s)=='number'&&s>200&&s<p style="text-align: left;"> <span style="color:#ff0000;">使用方法:</span></p><p style="text-align: left;"> ajax调用举例:</p><pre class="brush:php;toolbar:false">var myAjax=new ZIP_Ajax("http://www.a.com/you.php",{ method:"get", data:"key=123456&name=yuchao", format:"json", success:function(data){ ...... } }) 跨域请求调用举例: var jsonp=new ZIP_Ajax("http://www.a.com/you.php",{ method:"jsonp", data:{key:"123456",name:"yuchao"}, callback:function(data){ ...... } })
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
以上がカスタム Ajax クロスドメイン コンポーネントのパッケージ化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。
