


Plug-in Ajax encapsulé JS natif (même domaine, jsonp cross-domain)_compétences javascript
Poser une question, en fait, qu'est-ce que la soi-disant familiarité avec le JS natif ?
Récemment, j'ai fait des exercices familiers avec JS natif. . .
Il utilise JS natif pour encapsuler un plug-in Ajax, présenter des projets généraux et transférer des données. Cela semble réalisable. . . Expliquez brièvement l'idée. S'il y a quelque chose d'incorrect, veuillez me corriger ^_^
1. Noyau Ajax, création d'objets XHR
Le cœur de la technologie Ajax est l'objet XMLHttpRequest (XHR en abrégé). IE5 est le premier navigateur à introduire l'objet XHR dans IE5 est implémenté via un objet ActiveX dans la bibliothèque MSXML, c'est donc possible dans. IE Il existe 3 versions, à savoir MSXML2.XMLHttp, MSXML2.XMLHttp.3.0 et MSXML2.XMLHttp.6.0. Par conséquent, lors de la création d'un objet XHR, vous devez utiliser l'écriture de compatibilité :
createXHR:function(){ if(typeof XMLHttpRequest!='undefined'){ return new XMLHttpRequest(); }else if(typeof ActiveXObject!='undefined'){ if(typeof arguments.callee.activeXString!='string'){ var versions=["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"],i,len; for(i=0,len=versions.length;i<len;i++){ try{ new ActiveXObject(versions[i]); arguments.callee.activeXString=versions[i]; break; }catch(ex){ } } return new ActiveXObject(arguments.callee.activeXString); }else{ throw new Error("No XHR object available."); } }
2. Principaux attributs de la méthode XHR
Méthode :
Méthode open() : accepte 3 paramètres, le type de requête à envoyer, l'URL de la requête et une valeur booléenne indiquant s'il faut l'envoyer de manière asynchrone
Méthode send() : Les données à envoyer en tant que corps de la requête. Si vous n'avez pas besoin d'envoyer des données via le corps de la requête, vous devez transmettre null
.Méthode abort() : appelée avant de recevoir la réponse pour annuler la requête asynchrone.
Propriétés :
responseText : le texte renvoyé comme corps de réponse.
statut : statut HTTP de la réponse
statusText : description de l'état HTTP
readyState : indique l'étape active actuelle du processus de demande/réponse
Les valeurs desont :
0 : Non initialisé. La méthode open() n'a pas encore été appelée
1 : Commencez. La méthode open() a été appelée, mais la méthode send() n'a pas encore été appelée
2 : Envoyer. La méthode send() a été appelée, mais aucune réponse n'a été reçue.
3 : Recevoir. Des données de réponse partielles ont été reçues
4 : Terminé. Toutes les données de réponse ont été reçues et sont prêtes à être utilisées sur le client.
Le gestionnaire d'événements onreadystatechange dans cet exemple :
var complete=function(){ if(xhr.readyState==4){ if((xhr.status>=200&&xhr.status<300)||xhr.status==304){ if(params.success){ params.success(xhr.responseText);//执行调用ajax时指定的success函数 } }else{ if(params.fail){ params.fail();//执行调用ajax时指定的fail函数 }else{ throw new Error("Request was unsucessful:"+xhr.status); } } } }
Remarque : le gestionnaire d'événements onreadystatechange doit être spécifié avant d'appeler la méthode open() pour garantir la compatibilité entre navigateurs.
3. Envoyer la demande dans le même domaine
①Requête GET
Le type de requête le plus courant, souvent utilisé pour interroger certaines informations. Les informations sont envoyées au serveur en ajoutant les paramètres de chaîne de la requête à la fin de l'URL. Une chose à noter avec les requêtes de la méthode get est que chaque nom et valeur de paramètre dans la chaîne de requête doivent être codés à l'aide de encodeURIComponent() et que toutes les paires nom-valeur doivent être séparées par une esperluette.
Méthode de demande :
if((this.config.type=="GET")||(this.config.type=="get")){ for(var item in this.config.data){ this.config.url=addURLParam(this.config.url,item,this.config.data[item]);//使用encodeURIComponent()进行编码 } xhr.onreadystatechange=complete; xhr.open(this.config.type,this.config.url,this.config.async); xhr.send(null); }
②Demande POST
Habituellement utilisé pour envoyer des données qui doivent être enregistrées au serveur, les requêtes POST doivent soumettre les données comme corps de la requête. Cela simulera une soumission de formulaire. Autrement dit, définissez les informations d'en-tête Content-Type sur application/x-www-form-urlencoded ;
Fonction de sérialisation :
function serialize(data){ var val=""; var str=""; for(var item in data){ str=item+"="+data[item]; val+=str+'&'; } return val.slice(0,val.length-1); }
Méthode de demande :
if(this.config.type=="POST"||this.config.type=="post"){ xhr.addEventListener('readystatechange',complete); xhr.open(this.config.type,this.config.url,this.config.async); if(params.contentType){ this.config.contentType=params.contentType; } xhr.setRequestHeader("Content-Type",this.config.contentType); xhr.send(serialize(this.config.data)); }
两个请求的一些区别:
①GET请求把参数数据写到URL中,在URL中可以看到,而POST看不到,所以GET不安全,POST较安全。
②GET传送的数据量较小,不能大于2kb。POST传送的数据量较大,一般默认为不受限制。
③GET服务器端用Request.QueryString来获取变量的值,POST服务器端用Request.From来获取。
④GET将数据添加到URL中来传递到服务器,通常利用一个?,后面的参数每一个数据参数以“名称=值”的形式出现,参数与参数之间利用一个连接符&来区分。POST的数据是放在HTTP主体中的,其组织方式不只一种,有&链接方式,也有分隔符方式。可以隐藏参数,传递大批数据,比较方便。
四、jsonp跨域发送请求
首先,跨域是神马情况呢?
一个域名的组成:
http:// www . abc.com: 8080 / scripts/AjaxPlugin.js
协议 子域名 主域名 端口号 请求资源地址
~当协议、子域名、主域名、端口号中任意一个不相同时,都算作不同于。
~不同域之间互相请求资源,就算作“跨域”。
所有的浏览器都遵守同源策略,这个策略能够保证一个源的动态脚本不能读取或操作其他源的http响应和cookie,这就使浏览器隔离了来自不同源的内容,防止它们互相操作。所谓同源是指协议、域名和端口都一致的情况。浏览器会阻止ajax请求非同源的内容。
JSONP(JSON with Padding) 是一种跨域请求方式。主要原理是利用了script 标签可以跨域请求的特点,由其 src 属性发送请求到服务器,服务器返回 JS 代码,网页端接受响应,然后就直接执行了,这和通过 script 标签引用外部文件的原理是一样的。但是jsonp跨域只支持get请求。
JSONP由两部分组成:回调函数和数据,回调函数一般是由网页端控制,作为参数发往服务器端,服务器端把该函数和数据拼成字符串返回。
jsonp跨域主要需要考虑三个问题:
1、因为 script 标签的 src 属性只在第一次设置的时候起作用,导致 script 标签没法重用,所以每次完成操作之后要移除;
2、JSONP这种请求方式中,参数依旧需要编码;
3、如果不设置超时,就无法得知此次请求是成功还是失败;
由于代码有点长,就放个计时器的代码吧,完整代码见AjaxPlugin
//超时处理 if(params.time){ scriptTag.timer=setTimeout(function(){ head.removeChild(scriptTag); params.fail&¶ms.fail({message:"over time"}); window[cbName]=null; },params.time); }
以上就是本文的全部内容,希望对大家的学习有所帮助。
插件详细解析及使用方法见:https://github.com/LuckyWinty/AjaxPlugin

Le passage de C / C à JavaScript nécessite de s'adapter à la frappe dynamique, à la collecte des ordures et à la programmation asynchrone. 1) C / C est un langage dactylographié statiquement qui nécessite une gestion manuelle de la mémoire, tandis que JavaScript est dynamiquement typé et que la collecte des déchets est automatiquement traitée. 2) C / C doit être compilé en code machine, tandis que JavaScript est une langue interprétée. 3) JavaScript introduit des concepts tels que les fermetures, les chaînes de prototypes et la promesse, ce qui améliore la flexibilité et les capacités de programmation asynchrones.

Différents moteurs JavaScript ont des effets différents lors de l'analyse et de l'exécution du code JavaScript, car les principes d'implémentation et les stratégies d'optimisation de chaque moteur diffèrent. 1. Analyse lexicale: convertir le code source en unité lexicale. 2. Analyse de la grammaire: générer un arbre de syntaxe abstrait. 3. Optimisation et compilation: générer du code machine via le compilateur JIT. 4. Exécuter: Exécutez le code machine. Le moteur V8 optimise grâce à une compilation instantanée et à une classe cachée, SpiderMonkey utilise un système d'inférence de type, résultant en différentes performances de performances sur le même code.

Les applications de JavaScript dans le monde réel incluent la programmation côté serveur, le développement des applications mobiles et le contrôle de l'Internet des objets: 1. La programmation côté serveur est réalisée via Node.js, adaptée au traitement de demande élevé simultané. 2. Le développement d'applications mobiles est effectué par le reactnatif et prend en charge le déploiement multiplateforme. 3. Utilisé pour le contrôle des périphériques IoT via la bibliothèque Johnny-Five, adapté à l'interaction matérielle.

J'ai construit une application SAAS multi-locataire fonctionnelle (une application EdTech) avec votre outil technologique quotidien et vous pouvez faire de même. Premièrement, qu'est-ce qu'une application SaaS multi-locataire? Les applications saas multi-locataires vous permettent de servir plusieurs clients à partir d'un chant

Cet article démontre l'intégration frontale avec un backend sécurisé par permis, construisant une application fonctionnelle EdTech SaaS en utilisant Next.js. Le frontend récupère les autorisations des utilisateurs pour contrôler la visibilité de l'interface utilisateur et garantit que les demandes d'API adhèrent à la base de rôles

JavaScript est le langage central du développement Web moderne et est largement utilisé pour sa diversité et sa flexibilité. 1) Développement frontal: construire des pages Web dynamiques et des applications à une seule page via les opérations DOM et les cadres modernes (tels que React, Vue.js, Angular). 2) Développement côté serveur: Node.js utilise un modèle d'E / S non bloquant pour gérer une concurrence élevée et des applications en temps réel. 3) Développement des applications mobiles et de bureau: le développement de la plate-forme multiplateuse est réalisé par réact noral et électron pour améliorer l'efficacité du développement.

Les dernières tendances de JavaScript incluent la montée en puissance de TypeScript, la popularité des frameworks et bibliothèques modernes et l'application de WebAssembly. Les prospects futurs couvrent des systèmes de type plus puissants, le développement du JavaScript côté serveur, l'expansion de l'intelligence artificielle et de l'apprentissage automatique, et le potentiel de l'informatique IoT et Edge.

JavaScript est la pierre angulaire du développement Web moderne, et ses principales fonctions incluent la programmation axée sur les événements, la génération de contenu dynamique et la programmation asynchrone. 1) La programmation axée sur les événements permet aux pages Web de changer dynamiquement en fonction des opérations utilisateur. 2) La génération de contenu dynamique permet d'ajuster le contenu de la page en fonction des conditions. 3) La programmation asynchrone garantit que l'interface utilisateur n'est pas bloquée. JavaScript est largement utilisé dans l'interaction Web, les applications à une page et le développement côté serveur, améliorant considérablement la flexibilité de l'expérience utilisateur et du développement multiplateforme.


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

ZendStudio 13.5.1 Mac
Puissant environnement de développement intégré PHP

SublimeText3 version anglaise
Recommandé : version Win, prend en charge les invites de code !

DVWA
Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Version crackée d'EditPlus en chinois
Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code