Heim Web-Frontend js-Tutorial Ausführliche Antwort: Benutzerdefiniertes Ajax unterstützt die domänenübergreifende Komponentenkapselung

Ausführliche Antwort: Benutzerdefiniertes Ajax unterstützt die domänenübergreifende Komponentenkapselung

May 22, 2018 am 09:27 AM
ajax 支持 自定义

Dieser Artikel enthält eine detaillierte Analyse der Wissenspunkte im Zusammenhang mit der benutzerdefinierten Ajax-Unterstützung für die domänenübergreifende Komponentenkapselung. Freunde, die daran interessiert sind, können darauf verweisen.

Class.create()-Analyse

Prototyp imitieren, um Klassenvererbung zu erstellen

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;
};
Nach dem Login kopieren

Ajax-Definition: ZIP_Ajax=Class. create ();

Die Methode create gibt eine Konstruktoranforderung zurück, die äquivalent ist zu var ZIP_Ajax= function(){ this.request.apply(this, arguments); Use object impersonation in the function A construction Der Prozess wird intern ausgeführt, was der Übergabe der Konstruktoraufgabe an die Anforderungsmethode entspricht. Dies ist die Methode der ZIP_Ajax-Instanz, und diese verweist schließlich auf ZIP_Ajax Das neue Schlüsselwort verweist tatsächlich auf die Klasse ZIP_Ajax. Mit der Definition der Klasse ZIP_Ajax können Sie als Nächstes ihre Methode definieren:

Detaillierte Erklärung von XMLHttpRequest:

XMLHttpRequest ist keine Technologie, sondern eine in Mainstream-Browser integrierte Technologie Objekt mit vollem Zugriff auf das http-Protokoll. Die meisten herkömmlichen HTTP-Anfragen basieren auf der Übermittlung eines Formulars, der HTTP-Anfrage und der anschließenden Rückgabe eines Formulars. Während XMLHttpRequest synchrone Anforderungen unterstützt, besteht der größte Vorteil darin, dass es die asynchrone Übertragung zum Empfangen von Daten unterstützt. Beim Erstellen einer neuen Ajax-Anforderung wird tatsächlich ein XMLHttpRequest-Objekt instanziiert. Stellen Sie kurz die wichtigsten Ereignisse und Methoden vor:

readystatechange-Ereignis:

Wenn XMLHttpRequest eine http-Anfrage sendet, wird ein readystatechange-Ereignis ausgelöst. Das Ereignis gibt 0 zurück , 1 und 2 repräsentieren die Erstellung von XMLHttpRequest, den Abschluss der Initialisierung von XMLHttpRequest und das Senden der Anfrage. 3 bedeutet, dass die Antwort nicht beendet wurde (d. h. nur die Antwort-Header-Daten werden empfangen). die vollständige Antwort.

Der zurückgegebene Statusstatus gibt den vom Server zurückgegebenen Statuscode an:

Üblicherweise werden 200 für die erfolgreiche Datenrückgabe, 301 für permanente Umleitung, 302 für temporäre Umleitung (unsicher) und 304 für Lesen verwendet 400 bedeutet, dass in der Anfrage ein Syntaxfehler vorliegt, 403 bedeutet, dass der Server die Anfrage ablehnt, 404 bedeutet, dass die angeforderte Webressource nicht vorhanden ist, 405 bedeutet, dass der Server am angegebenen Standort nicht gefunden werden kann, 408 bedeutet, dass die Anfrage abgelaufen ist. 500 Serverinterner Fehler, 505 bedeutet, dass der Server die angeforderte http-Protokollversion nicht unterstützt.

200–300 bedeutet Erfolg, 300–400 bedeutet Umleitung, 400–500 bedeutet, dass der Inhalt oder das Format der Anfrage oder der Anfragetext zu groß ist, was einen Fehler verursacht, 500+ bedeutet interner Serverfehler

Open-Methode:

Open empfängt drei Parameter: Anforderungstyp (Get, Post, Head usw.), URL, synchron oder asynchron

Send-Methode :

Wenn die Anfrage bereit ist, wird die Sendemethode ausgelöst und der gesendete Inhalt sind die angeforderten Daten (wenn es sich um eine Get-Anfrage handelt, ist der Parameter null;

Nachdem die Anfrage erfolgreich war, wird die benutzerdefinierte Erfolgsmethode und ihre Parameter ausgeführt. So geben Sie Daten zurück:

ajax-domänenübergreifend:

Was ist domänenübergreifend?

Wenn zwei Websites www.a.com zu www wechseln möchten, kommt es zu domänenübergreifenden Problemen, die durch inkonsistente Domänennamen verursacht werden Wenn die Ports unterschiedlich sind, kommt es zu domänenübergreifenden Problemen (aus diesem Grund kann js nur abwarten und beurteilen, ob es sich um domänenübergreifende Probleme handelt. Verwenden Sie beispielsweise window.location.protocol+window.location.host, um festzustellen, http://www.baidu.com.

Was sind die Lösungen für domänenübergreifende Probleme mit js?

1, document.domain+iframe

Für Anfragen mit derselben Hauptdomäne, aber unterschiedlichen Unterdomänen kann Domänenname + Iframe als Lösung verwendet werden. Die konkrete Idee besteht darin, dass unter dem Domänennamen .com/a zwei verschiedene AB-Dateien vorhanden sind. html

und hi.a.com/b.html können wir document.domain="a.com" zu den beiden HTML-Dateien hinzufügen und sie dann in einer Datei erstellen. Ein Iframe steuert den InhaltDokument von den iframe, damit die beiden Dateien kommunizieren können Datei auf

document.domain="a.com";

Probleme:

1. Sicherheit, wenn eine Site (hi.a. com) angegriffen wird, eine andere Seite (www.a.com) führt zu einer Sicherheitslücke 2. Wenn mehrere Iframes auf einer Seite eingeführt werden, muss dieselbe Domain festgelegt werden, um alle Iframes dynamisch erstellen zu können Skripte (die legendäre JSONP-Methode)

Browser verbieten standardmäßig den domänenübergreifenden Zugriff, verbieten jedoch nicht, dass auf der Seite auf JS-Dateien von anderen Domänennamen verwiesen wird, und Importe können durch JS-Dateien usw. ausgeführt werden Auf dieser Grundlage können wir durch die Erstellung von Skriptknotenmethoden eine vollständige domänenübergreifende Kommunikation erreichen. Die Implementierungsschritte sind:

a. Laden Sie ein Skript dynamisch auf die Seite des Anforderungsinitiators. Die von der Adresse zurückgegebene Javascript-Methode wird vom Initiator ausgeführt kann Parameter übergeben und unterstützt nur das Abrufen von Übermittlungsparametern.

b. Rufen Sie beim Laden des Skripts die domänenübergreifende js-Methode für die Rückrufverarbeitung (jsonp) auf.

Zum Beispiel:

Initiator

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文件中元素
  }
Nach dem Login kopieren

Empfänger:

Der Empfänger muss nur eine Ausführungsfunktion zurückgeben, die der Rückruf in der Anfrage und Zuweisung ist Parameter.

3. Verwenden Sie html5 postMessage:

html5新功能有一个就是跨文档消息传输,如今大部分浏览器都已经支持并使用(包括ie8+),其支持基于web的实时消息传递并且不存在跨域问题。postMessage一般会跟iframe一起使用。

举例如下:

父页面:

<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>
Nach dem Login kopieren

这样在父页面加载完成后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: &#39;get&#39;,
      async: true},options||{});
    
    if(options.method=="get"){
      url+=(url.indexOf(&#39;?&#39;)==-1?&#39;?&#39;:&#39;&&#39;)+options.data;
      options.data=null;
    }
    httpRequest.open(options.method,url,options.async);
    if (options.method == &#39;post&#39;) {
      httpRequest.setRequestHeader(&#39;Content-type&#39;, &#39;application/x-www-form-urlencoded; charset=UTF-8&#39;);
    }
    httpRequest.onreadystatechange = this._onStateChange.bind(this, httpRequest, url, options);
    httpRequest.send(options.data || null);//get请求情况下data为null
    return httpRequest;
  },
  jsonp:function(){
    jsonp_str = &#39;jsonp_&#39; + new Date().getTime();
    eval(jsonp_str + &#39; = &#39; + this.options.callback + &#39;;&#39;);    
    this.options.url += &#39;?callback=&#39; + jsonp_str;
    for(var i in this.options.data) {
      this.options.url += &#39;&&#39; + i + &#39;=&#39; + 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(&#39;Msxml2.XMLHTTP&#39;)
      }
      catch(e){
        try {
          return new ActiveXObject(&#39;Microsoft.XMLHTTP&#39;);
        } catch (e) {
          return false;
        }
      }
    }
  },
  _onStateChange:function(http,url,options){
    if(http.readyState==4){
      http.onreadystatechange=function(){};//重置事件为空
      var s=http.status;
      if(typeof(s)==&#39;number&#39;&&s>200&&s<300){
        if(typeof(options.success)!=&#39;function&#39;)return;
        var format=http;
        if(typeof(options.format)==&#39;string&#39;){//判断请求数据格式
          switch(options.format){
            case &#39;text&#39;:
              format=http.responseText;
              break;
            case &#39;json&#39;:
              try{
                format=eval(&#39;(&#39;+http.responseText+&#39;)&#39;);
              }
              catch (e) {
                if (window.console && console.error) console.error(e);
              }
              break;
            case &#39;xml&#39;:
              format=http.responseXML;
              break;
          }
        }
      options.success(format);//成功回调
      }
      else {//请求出问题后处理
        if (window.closed) return;
        if (typeof (options.failure) == &#39;function&#39;) {
          var error = {
            status: http.status,
            statusText: http.statusText
          }
          //  判断是否是网络断线或者根本就请求不到服务器
          if (http.readyState == 4 && (http.status == 0 || http.status == 12030)) {
            //  是
            error.status = -1;
          }
          options.failure(error);
        }
      }
    } 
  }
};
Nach dem Login kopieren

使用方法:

ajax调用举例:

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){
    ......
  }
})
Nach dem Login kopieren

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

MUi框架ajax请求WebService接口实例_AJAX相关

Struts2和Ajax数据交互(图文教程)

原生ajax写的上拉加载实例(图文教程)

Das obige ist der detaillierte Inhalt vonAusführliche Antwort: Benutzerdefiniertes Ajax unterstützt die domänenübergreifende Komponentenkapselung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So richten Sie schnell einen benutzerdefinierten Avatar in Netflix ein So richten Sie schnell einen benutzerdefinierten Avatar in Netflix ein Feb 19, 2024 pm 06:33 PM

Ein Avatar auf Netflix ist eine visuelle Darstellung Ihrer Streaming-Identität. Benutzer können über den Standard-Avatar hinausgehen, um ihre Persönlichkeit auszudrücken. Lesen Sie diesen Artikel weiter, um zu erfahren, wie Sie in der Netflix-App ein benutzerdefiniertes Profilbild festlegen. So legen Sie schnell einen benutzerdefinierten Avatar in Netflix fest. In Netflix gibt es keine integrierte Funktion zum Festlegen eines Profilbilds. Sie können dies jedoch tun, indem Sie die Netflix-Erweiterung in Ihrem Browser installieren. Installieren Sie zunächst ein benutzerdefiniertes Profilbild für die Netflix-Erweiterung in Ihrem Browser. Sie können es im Chrome Store kaufen. Öffnen Sie nach der Installation der Erweiterung Netflix in Ihrem Browser und melden Sie sich bei Ihrem Konto an. Navigieren Sie zu Ihrem Profil in der oberen rechten Ecke und klicken Sie

So passen Sie die Tastenkombinationseinstellungen in Eclipse an So passen Sie die Tastenkombinationseinstellungen in Eclipse an Jan 28, 2024 am 10:01 AM

Wie kann ich die Tastenkombinationseinstellungen in Eclipse anpassen? Als Entwickler ist die Beherrschung von Tastenkombinationen einer der Schlüssel zur Effizienzsteigerung beim Codieren in Eclipse. Als leistungsstarke integrierte Entwicklungsumgebung bietet Eclipse nicht nur viele Standard-Tastenkombinationen, sondern ermöglicht Benutzern auch, diese nach ihren eigenen Vorlieben anzupassen. In diesem Artikel wird erläutert, wie Sie die Tastenkombinationseinstellungen in Eclipse anpassen, und es werden spezifische Codebeispiele gegeben. Öffnen Sie Eclipse. Öffnen Sie zunächst Eclipse und geben Sie ein

So beheben Sie den 403-Fehler, der bei einer jQuery-AJAX-Anfrage auftritt So beheben Sie den 403-Fehler, der bei einer jQuery-AJAX-Anfrage auftritt Feb 20, 2024 am 10:07 AM

Titel: Methoden und Codebeispiele zur Behebung von 403-Fehlern in jQuery-AJAX-Anfragen. Der 403-Fehler bezieht sich auf eine Anfrage, dass der Server den Zugriff auf eine Ressource verbietet. Dieser Fehler tritt normalerweise auf, weil der Anfrage die Berechtigungen fehlen oder sie vom Server abgelehnt wird. Wenn Sie jQueryAJAX-Anfragen stellen, stoßen Sie manchmal auf diese Situation. In diesem Artikel wird erläutert, wie dieses Problem gelöst werden kann, und es werden Codebeispiele bereitgestellt. Lösung: Berechtigungen prüfen: Stellen Sie zunächst sicher, dass die angeforderte URL-Adresse korrekt ist und stellen Sie sicher, dass Sie über ausreichende Berechtigungen für den Zugriff auf die Ressource verfügen.

Der Betriebsprozess des benutzerdefinierten Bildschirmlayouts von edius Der Betriebsprozess des benutzerdefinierten Bildschirmlayouts von edius Mar 27, 2024 pm 06:50 PM

1. Das Bild unten zeigt das Standard-Bildschirmlayout von edius. Das Standard-EDIUS-Fensterlayout ist ein horizontales Layout. Daher überlappen sich viele Fenster und das Vorschaufenster befindet sich im Einzelfenstermodus. 2. Sie können den [Dual Window Mode] über die Menüleiste [View] aktivieren, damit das Vorschaufenster gleichzeitig das Wiedergabefenster und das Aufnahmefenster anzeigt. 3. Sie können das Standard-Bildschirmlayout über [Ansichtsmenüleiste > Fensterlayout > Allgemein] wiederherstellen. Darüber hinaus können Sie auch das für Sie passende Layout anpassen und es als häufig verwendetes Bildschirmlayout speichern: Ziehen Sie das Fenster auf ein für Sie passendes Layout, klicken Sie dann auf [Ansicht > Fensterlayout > Aktuelles Layout speichern > Neu] und klicken Sie auf „Ansicht > Fensterlayout > Aktuelles Layout speichern > Neu“. Popup [Aktuelles Layout speichern] Layout] Geben Sie den Layoutnamen in das kleine Fenster ein und klicken Sie auf OK

Unterstützt PyCharm Community Edition genügend Plugins? Unterstützt PyCharm Community Edition genügend Plugins? Feb 20, 2024 pm 04:42 PM

Unterstützt PyCharm Community Edition genügend Plugins? Benötigen Sie spezifische Codebeispiele Da die Python-Sprache im Bereich der Softwareentwicklung immer häufiger verwendet wird, wird PyCharm als professionelle integrierte Python-Entwicklungsumgebung (IDE) von Entwicklern bevorzugt. PyCharm ist in zwei Versionen unterteilt: die professionelle Version und die Community-Version. Die Community-Version wird kostenlos bereitgestellt, die Plug-in-Unterstützung ist jedoch im Vergleich zur professionellen Version eingeschränkt. Die Frage ist also: Unterstützt die PyCharm Community Edition genügend Plug-Ins? In diesem Artikel werden spezifische Codebeispiele verwendet

So beheben Sie den Fehler 403 der jQuery AJAX-Anfrage So beheben Sie den Fehler 403 der jQuery AJAX-Anfrage Feb 19, 2024 pm 05:55 PM

jQuery ist eine beliebte JavaScript-Bibliothek zur Vereinfachung der clientseitigen Entwicklung. AJAX ist eine Technologie, die asynchrone Anfragen sendet und mit dem Server interagiert, ohne die gesamte Webseite neu zu laden. Wenn Sie jedoch jQuery zum Senden von AJAX-Anfragen verwenden, treten manchmal 403-Fehler auf. Bei 403-Fehlern handelt es sich in der Regel um vom Server verweigerte Zugriffsfehler, möglicherweise aufgrund von Sicherheitsrichtlinien oder Berechtigungsproblemen. In diesem Artikel besprechen wir, wie Sie bei einer jQueryAJAX-Anfrage den Fehler 403 beheben können

Vor- und Nachteile-Analyse: Ein genauerer Blick auf die Vor- und Nachteile von Open-Source-Software Vor- und Nachteile-Analyse: Ein genauerer Blick auf die Vor- und Nachteile von Open-Source-Software Feb 23, 2024 pm 11:00 PM

Vor- und Nachteile von Open-Source-Software: Um die Vor- und Nachteile von Open-Source-Projekten zu verstehen, sind konkrete Codebeispiele erforderlich. Im heutigen digitalen Zeitalter erhält Open-Source-Software immer mehr Aufmerksamkeit und Respekt. Als Softwareentwicklungsmodell, das auf dem Geist der Zusammenarbeit und des Austauschs basiert, wird Open-Source-Software in verschiedenen Bereichen häufig eingesetzt. Trotz der vielen Vorteile von Open-Source-Software gibt es jedoch auch einige Herausforderungen und Einschränkungen. Dieser Artikel befasst sich mit den Vor- und Nachteilen von Open-Source-Software und demonstriert die Vor- und Nachteile von Open-Source-Projekten anhand konkreter Codebeispiele. 1. Vorteile von Open-Source-Software 1.1 Offenheit und Transparenz Open-Source-Software

Wie kann ich die X- und Y-Achse in Excel anpassen? (So ​​passen Sie die Skala der Excel-Koordinatenachse an) Wie kann ich die X- und Y-Achse in Excel anpassen? (So ​​passen Sie die Skala der Excel-Koordinatenachse an) Mar 14, 2024 pm 02:10 PM

In einer Excel-Tabelle müssen Sie manchmal Koordinatenachsen einfügen, um den sich ändernden Trend der Daten intuitiver zu erkennen. Einige Freunde wissen immer noch nicht, wie man Koordinatenachsen in die Tabelle einfügt. Als nächstes werde ich Ihnen zeigen, wie Sie die Koordinatenachsenskala in Excel anpassen. Methode zum Einfügen der Koordinatenachse: 1. Wählen Sie in der Excel-Oberfläche die Daten aus. 2. Klicken Sie in der Einfügeoberfläche auf , um ein Säulendiagramm oder Balkendiagramm einzufügen. 3. Wählen Sie in der erweiterten Oberfläche den Grafiktyp aus. 4. Klicken Sie in der Rechtsklick-Oberfläche der Tabelle auf Daten auswählen. 5. In der erweiterten Benutzeroberfläche können Sie sie anpassen.

See all articles