ajax

工作原理

相当于在用户和服务器之间加了—个中间层(AJAX 引擎),使用户操作与服务器响应异步化。

并不是所有的用户请求都提交给服务器,像—些数据验证和数据处理等都交给 Ajax 引擎自己来做, 只有确定需要从服务器读取新数据时再由 Ajax 引擎代为向服务器提交请求。

ajax 是同步还是异步,怎么样实现同步

异步技术

  • 打开 url 时,第三个参数,true 为异步,false 为同步
  • 当为同步时,无需编写 onreadystatechange 函数,将操作写在 send() 方法后面即可

实现一个 ajax,兼容

var xmlhttp;
if (window.XMLHttpRequest) {
    // ie7+,及现代浏览器
    xmlhttp = new XMLHttpRequest();
} else {
    // ie5 ie6
    xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
}
xmlhttp.onreadystatechange = function () {
    console.log(xmlhttp);
    // readyState:
    // 0:请求未初始化,还没有调用 open()
    // 1:服务器已建立连接,open() 已调用,还没有调用 send()
    // 2:请求已接收,send() 已调用,且头部和状态可以获得
    // 3:请求处理中,responseText 属性已包含部分数据
    // 4:请求已完成,且响应已就绪
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        document.getElementById('div').innerHTML = xmlhttp.responseText;
    }
};

document.getElementById('btn').onclick = function () {
    xmlhttp.open('GET', 'url', true);
    xmlhttp.send();
};

document.getElementById('btn2').onclick = function () {
    xmlhttp.open('POST', 'url', true);
    xmlhttp.setRequestHeader(
        'Content-type',
        'application/x-www-form-urlencoded'
    );
    xmlhttp.send('fname=Henry&lname=Ford');
};

Ajax 返回 204 算是成功吗

算,具体看 blog/http/status-code.txt

cookie 作用域、csrf 跨站请求伪造知识(解答)

表单提交和 ajax 的区别

  • 刷新:ajax 无需刷新网页,表单提交要刷新
  • 请求:ajax 后台创建请求,表单放弃本页面再次申请
  • 实现:ajax 必须使用 js 实现,表单是浏览器功能,无需 js
  • 数据:ajax 需要代码来处理数据,表单根据表单结构自动完成,无需代码干预
Last Updated:
Contributors: zhangfei