


実際のところ、ネイティブ JS に対するいわゆる馴染みとは何でしょうか?
最近私はネイティブ JS を使っておなじみの演習を行っています。 。 。
ネイティブ JS を使用して Ajax プラグインをカプセル化し、一般的なプロジェクトを導入し、データを転送します。 。 。考え方を簡単に説明してください。間違っているところがあれば修正してください^_^
1. Ajax コア、XHR オブジェクトの作成
Ajax テクノロジの中核は、XMLHttpRequest オブジェクト (略して XHR) です。IE5 の XHR オブジェクトは、MSXML ライブラリの ActiveX オブジェクトを通じて実装されているため、XHR オブジェクトを導入することができます。 IE MSXML2.XMLHttp、MSXML2.XMLHttp.3.0、MSXML2.XMLHttp.6.0 の 3 つのバージョンがあります。したがって、XHR オブジェクトを作成するときは、互換性のある記述を使用する必要があります:
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. XHR の主なメソッド属性
方法:
open() メソッド: 送信するリクエストのタイプ、リクエストの URL、非同期に送信するかどうかを示すブール値の 3 つのパラメータを受け入れます
send() メソッド: リクエスト本文として送信するデータ。リクエスト本文を通じてデータを送信する必要がない場合は、null
を渡す必要があります。abort() メソッド: 非同期リクエストをキャンセルするための応答を受信する前に呼び出されます。
プロパティ:
responseText: 応答本文として返されるテキスト。
status: 応答の HTTP ステータス
statusText: HTTP ステータスの説明
readyState: 要求/応答プロセスの現在アクティブな段階を示します
の値は次のとおりです:
0: 初期化されていません。 open() メソッドはまだ呼び出されていません
1: 開始します。 open() メソッドは呼び出されていますが、send() メソッドはまだ呼び出されていません
2: 送信します。 send() メソッドが呼び出されましたが、応答が受信されませんでした。
3: 受け取ります。部分的な応答データを受信しました
4: 完了。すべての応答データが受信され、クライアントで使用できるようになりました。
この例の onreadystatechange イベント ハンドラー:
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); } } } }
注: ブラウザ間の互換性を確保するには、open() メソッドを呼び出す前に onreadystatechange イベント ハンドラーを指定する必要があります。
3. 同じドメインでリクエストを送信します
①GETリクエスト
最も一般的なリクエスト タイプ。特定の情報をクエリするためによく使用されます。情報は、クエリの文字列パラメーターを URL の末尾に追加することによってサーバーに送信されます。 get メソッドのリクエストで注意すべき点の 1 つは、クエリ文字列内の各パラメーターの名前と値は encodeURIComponent() を使用してエンコードする必要があり、すべての名前と値のペアをアンパサンドで区切る必要があることです。
リクエスト方法:
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); }
②POSTリクエスト
通常、サーバーに保存する必要があるデータを送信するために使用されます。POST リクエストでは、リクエストの本文としてデータを送信する必要があります。これにより、フォームの送信がシミュレートされます。つまり、Content-Type ヘッダー情報を application/x-www-form-urlencoded に設定します。
シリアル化関数:
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); }
リクエスト方法:
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

如何使用JS和百度地图实现地图平移功能百度地图是一款广泛使用的地图服务平台,在Web开发中经常用于展示地理信息、定位等功能。本文将介绍如何使用JS和百度地图API实现地图平移功能,并提供具体的代码示例。一、准备工作使用百度地图API前,首先需要在百度地图开放平台(http://lbsyun.baidu.com/)上申请一个开发者账号,并创建一个应用。创建完成

如何使用JS和百度地图实现地图多边形绘制功能在现代网页开发中,地图应用已经成为常见的功能之一。而地图上绘制多边形,可以帮助我们将特定区域进行标记,方便用户进行查看和分析。本文将介绍如何使用JS和百度地图API实现地图多边形绘制功能,并提供具体的代码示例。首先,我们需要引入百度地图API。可以利用以下代码在HTML文件中导入百度地图API的JavaScript

js字符串转数组的方法:1、使用“split()”方法,可以根据指定的分隔符将字符串分割成数组元素;2、使用“Array.from()”方法,可以将可迭代对象或类数组对象转换成真正的数组;3、使用for循环遍历,将每个字符依次添加到数组中;4、使用“Array.split()”方法,通过调用“Array.prototype.forEach()”将一个字符串拆分成数组的快捷方式。

如何使用JS和百度地图实现地图热力图功能简介:随着互联网和移动设备的迅速发展,地图成为了一种普遍的应用场景。而热力图作为一种可视化的展示方式,能够帮助我们更直观地了解数据的分布情况。本文将介绍如何使用JS和百度地图API来实现地图热力图的功能,并提供具体的代码示例。准备工作:在开始之前,你需要准备以下事项:一个百度开发者账号,并创建一个应用,获取到相应的AP

js中new操作符做了:1、创建一个空对象,这个新对象将成为函数的实例;2、将新对象的原型链接到构造函数的原型对象,这样新对象就可以访问构造函数原型对象中定义的属性和方法;3、将构造函数的作用域赋给新对象,这样新对象就可以通过this关键字来引用构造函数中的属性和方法;4、执行构造函数中的代码,构造函数中的代码将用于初始化新对象的属性和方法;5、如果构造函数中没有返回等等。

这篇文章主要为大家详细介绍了js实现打字小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

php在特定情况下可以读js内部的数组。其方法是:1、在JavaScript中,创建一个包含需要传递给PHP的数组的变量;2、使用Ajax技术将该数组发送给PHP脚本。可以使用原生的JavaScript代码或者使用基于Ajax的JavaScript库如jQuery等;3、在PHP脚本中,接收传递过来的数组数据,并进行相应的处理即可。

js全称JavaScript,是一种具有函数优先的轻量级,直译式、解释型或即时编译型的高级编程语言,是一种属于网络的高级脚本语言;JavaScript基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式,如函数式编程。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 Chinese version
Chinese version, very easy to use

SublimeText3 Mac version
God-level code editing software (SublimeText3)

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Dreamweaver CS6
Visual web development tools

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software
