この記事では、クロスドメイン コンポーネントのカプセル化のカスタム Ajax サポートに関連するナレッジ ポイントを詳細に分析します。これに興味のある方は参照してください。
Class.create() 分析
プロトタイプを模倣してクラス継承を作成
var Class = { create: function () { var c = function () { this.request.apply(this, arguments); } for (var i = 0, il = arguments.length, it; i < il; i++) { it = arguments[i]; if (it == null) continue; Object.extend(c.prototype, it); } return c; } }; Object.extend = function (tObj, sObj) { for (var o in sObj) { tObj[o] = sObj[o]; } return tObj; };
ajax 定義: ZIP_Ajax=Class.create();
create メソッドは、var ZIP_Ajax と同等のコンストラクター リクエストを返します。 = function(){ this.request.apply(this, argument); }; オブジェクトの偽装を使用して、関数内で構築プロセスを実行します。これは、コンストラクター タスクをリクエスト メソッドに渡すのと同じです。これは ZIP_Ajax のインスタンスのメソッドを指し、this は ZIP_Ajax のインスタンスを指します。最後に、新しいキーワードに従って、これは実際には ZIP_Ajax クラスを指します。クラス ZIP_Ajax の定義を使用して、次にそのメソッドを定義できます。
XMLHttpRequest 詳細な説明:
XMLHttpRequest はテクノロジーではなく、http プロトコルに完全にアクセスできる主流ブラウザーに組み込まれたオブジェクトです。従来の http リクエストのほとんどは、フォームの送信と http リクエストに基づいて、フォームを返します。 XMLHttpRequest は同期リクエストをサポートしていますが、最大の利点は、データを受信するための非同期送信をサポートしていることです。新しい ajax リクエストを作成すると、実際には XMLHttpRequest オブジェクトがインスタンス化されます。主なイベントとメソッドの簡単な紹介:
readystatechange イベント:
XMLHttpRequest が http リクエストを送信すると、readystatechange イベントがトリガーされ、それぞれ 0、1、2 の作成を表す 5 つの値が返されます。 XMLHttpRequest および初期化の完了は、リクエストが送信され、3 は応答が終了していない (つまり、応答ヘッダー データのみを受信した) ことを意味し、4 は完全な応答に対する実際の応答です。
返されたステータス ステータスは、サーバーから返されたステータス コードを示します。
一般的に使用されるものは、データの正常な返却を示す 200、301 永続的なリダイレクト、302 一時的なリダイレクト (安全ではない) 304 キャッシュされたデータの読み取り 400 リクエストの構文エラーを示す、403はサーバーがリクエストを拒否したことを意味します、404はリクエストされたWebリソースが存在しないことを意味します、405は指定された場所にサーバーが見つからないことを意味します、408はリクエストがタイムアウトしたことを意味します、500サーバー内部エラー、505はサーバーがサポートしていないことを意味します要求された http プロトコルのバージョン。
200〜300は成功を示し、300〜400はリダイレクトを示し、400〜500はリクエストの内容または形式またはリクエスト本文が大きすぎてエラーが発生したことを示し、500+は内部サーバーエラーを示します
openメソッド:
open は 3 つを受け取ります。パラメータは、リクエスト タイプ (get、post、head など)、URL、同期または非同期です。
send メソッド:
リクエストの準備ができたら、send メソッドがトリガーされ、送信されたコンテンツはリクエストされたデータです (取得リクエストの場合、パラメーターは null です。
リクエストが成功した後、成功カスタム メソッドが実行され、そのパラメーターは戻りデータです。
ajax クロス-ドメイン:
クロスドメインとは何ですか?
2 つのサイト www.a.com がデータを送信する場合、ドメイン名が一致しない場合でも、クロスドメインの問題が発生します。名前が同じでも、ポートが異なると、クロスドメインの問題が発生します (このため、js はクロスドメインかどうかを待機して判断することしかできません)。 .host (例: http://www.baidu.com)。
js のクロスドメイン問題の解決策は何ですか?
1. document.domain+iframe
同じメイン ドメインのリクエストの場合ただし、サブドメインが異なる場合は、解決策としてドメイン名 + iframe を使用できます。具体的なアイデアは、2 つのドメイン名 / の下に 2 つの異なる ab ファイルがある場合です。 b.html の場合、2 つの HTML ファイルに document.domain="a.com" を追加し、a ファイルに iframe を作成して iframe の contentDocument を制御し、2 つのファイルが通信できるようにします。以下の通り:
www.a.comのa.htmlファイル内
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 が動作できる必要があります。 、同じドメインを設定する必要があります
2. スクリプトを動的に作成します (伝説的な jsonp メソッド)ブラウザはデフォルトでクロスドメイン アクセスを禁止しますが、ページ内の他のドメイン名からの js ファイルは禁止されません。これに基づいて、スクリプト ノード メソッドを作成することで、完全なクロスドメイン通信を実現できます。実装手順は次のとおりです。
a. リクエスト イニシエーター ページにスクリプトを動的にロードします。スクリプトの URL はレシーバーを指します。このアドレスによって返される JavaScript メソッドは、イニシエーターによって実行されます。この URL は、送信パラメーターの取得のみをサポートします。
b. スクリプトをロードするときに、コールバック処理用のクロスドメイン 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}) }
レシーバー:
レシーバーは、リクエスト内のコールバックでありパラメーターを割り当てる実行関数を返すだけで済みます。
3. HTML5 postMessage を使用します:html5新功能有一个就是跨文档消息传输,如今大部分浏览器都已经支持并使用(包括ie8+),其支持基于web的实时消息传递并且不存在跨域问题。postMessage一般会跟iframe一起使用。 举例如下: 父页面: 这样在父页面加载完成后main.html页面的textArea部分就会显示"显示我"三个字 ajax方法封装code: 使用方法: ajax调用举例: 上面是我整理给大家的,希望今后会对大家有帮助。 相关文章:<iframe id="myPost" src="http//www.a.com/main.html"></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)
<body>
<p>
<span id="textArea"></span>
</p>
</body>
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<300){
if(typeof(options.success)!='function')return;
var format=http;
if(typeof(options.format)=='string'){//判断请求数据格式
switch(options.format){
case 'text':
format=http.responseText;
break;
case 'json':
try{
format=eval('('+http.responseText+')');
}
catch (e) {
if (window.console && console.error) console.error(e);
}
break;
case 'xml':
format=http.responseXML;
break;
}
}
options.success(format);//成功回调
}
else {//请求出问题后处理
if (window.closed) return;
if (typeof (options.failure) == 'function') {
var error = {
status: http.status,
statusText: http.statusText
}
// 判断是否是网络断线或者根本就请求不到服务器
if (http.readyState == 4 && (http.status == 0 || http.status == 12030)) {
// 是
error.status = -1;
}
options.failure(error);
}
}
}
}
};
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){
......
}
})
以上が詳細な回答: カスタム Ajax はクロスドメイン コンポーネントのカプセル化をサポートしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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の複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
