form发POST、GET,但是要刷新页面或新开页面
a可以发GET,但是要刷新页面或新开页面
img可以发GET,但是只能图片形式展示
link可以发GET请求,但是只能以CSS、favicon形式展示
script可以发GET请求,但是只能以脚本形式运行
需要一个API可以发GET、POST、PUT、DELETE请求,且以什么形式展示都可以
A: asyn 异步 J : JavaScript A:and X:XML
1. XMLHttpRequest发请求
2.服务器返回XML格式字符串(现在用JSON)
3.JS解析XML,并更新局部页面
知道可以处理xml就行了(DOM操作xml),过时没什么用了已经。。
JSON:新的语言(仿JavaScript作者顺便损了一下js)
1.json没有抄袭 function、undefined
2.json字符串首尾必须是双引号 "
JS VS JSON
undefined 没有
null null
['a', 'b'] ["a", "b"]
function fn(){} 没有
{name: 'frank'} {"name":"frank"}
'frank' "frank"
var a = {}; a.self = a 搞不定(没有变量)不能自己引用自己
同源策略:如果你的js不是baidu.com页面里的,就不能向baidu.com发任何ajax请求,其他请求可以,像form什么的。
浏览器必须保证 只有协议+端口+域名一模一样,才允许发ajax请求
1. http://baidu.com 可以向 http://www.baidu.com 发请求吗 ?? 不行
2. http://baidu.com:80 可以向 http://baidu.com:81发请求吗?? 不行
要想访问,必须另一个网站的人设置
可以用JSONP!!具体再复习吧,用Ajax的话需要:CORS可以告诉浏览器,我俩一家的,别阻止他。后台代码加一句(响应头):
response.setHeader('Access-Control-Allow-Origin', 'http://frank.com:8001')
CORS:(Cross-origin resource sharing)
深入ajax/自己实现/promise
ajax可以获取(有的可以修改)请求/响应中的4部分内容
GET /xxx HTTP/1.1
HOST: nn.com:8888
Content-Type: application/x-www.url-encoded
1.js可以设置任意请求header吗 可以
第一部分 request.open('get', '/xxx')
第二部分 request.setHeader('content-type', 'application/x-www.url-encoded')
第四部分 request.send('wo wo wo ')
HTTP/1.1 200 OK
Content-Type: text/html
<!DOCTYPE html>
<html></html>
2.js可以获取任意响应header吗? 可以
第一部分 request.status / request.statusText (OK)
第二部分 request.getResponseHeader() / request.getAllResponseHeaders()
第四部分 request.responseText
ajax 封装
jQuery ajax
promise
不用取名字,标准化
自己封装jQuery ajax!!!重要背下来
window.jQuery.ajax = function ({
url,
method,
body,
headers
}) {
return new Promise(function (resolve, reject) {
let request = new XMLHttpRequest()
request.open(method, url) // set request
for (let key in headers) {
let value = headers[key]
request.setRequestHeader(key, value)
}
request.onreadystatechange = () => {
if (request.readyState === 4) {
if (request.status >= 200 && request.status < 300) {
resolve.call(undefined, request.responseText)
} else if (request.status >= 400) {
console.log('说明请求失败')
reject.call(undefined, request)
}
}
}
request.send(body)
})
}
window.Promise = function(fn){
// ....
return {
then: function
}
} window.Promise 等于1个函数,接受一个函数作为参数,return一个对象,对象中有then这一属性,使用它的实例就调用return的对象的then,ajax返回promise实例,其中含有then属性
网友评论