今天试着默写ajax时出现了神秘的问题,出现如图所示的错误:

百度了一下,说是跨源问题,我以为放在同一个文件夹不也是同源嘛!结果打扰了,属实是弟弟,协议,域名,端口相同的算同源,其他的不是!!!

最后找到了解决的方法,用Appserv在本地搭建一个web服务器,(Appserv的教程很多,大概都能解决问题)

(假装自己开始接触服务器了哈)

好不容易多点空(我应该被抓去戒网瘾的),再深入点学学ajax吧~

一个很简单但是该有的有了八成的例子:

<body>
<button id="contain">点击修改</button>
</body>
<script async>
function ajax(){
var request = new XMLHttpRequest();
request.open("POST","data.html",true);
console.log(request.status,request.readyState);
request.onreadystatechange = function(){
console.log(request.status,request.readyState);
if(request.status == 200 && request.readyState == 4){
contain.innerHTML = request.responseText;
}
// Response.setHeader("Access-Control-Allow-Origin","*");
}; request.send();
}
window.onload = function(){
var contain = document.getElementById("contain");
contain.onclick = ajax;
}
</script>

status:响应的http状态,statusText:http状态的说明

readystate:请求/响应的活动阶段,

0~4,表示未初始化且未调用open()方法、启动。已调用open()但尚未调用send()方法、发送,已调用send()方法但尚未收到响应、接收,已经接收到部分数据、完成,接收到全部数据,上面的例子在控制台打印的结果:

请求头与响应头:

每个http请求与响应都会带有相应的头部信息,使用setRequestHeader()方法(在open()与send()之间调用)可以自定义请求的头部信息,使用getResponseHeader()并传入头部字段名称可以取得相应的响应头部信息,实例:

GET请求与POST请求:

暂时先这么理解:前者一般用于获取/查询数据,因为受数据量小的限制,而POST一般用于发送数据,其数据量不受限制

GET请求:将查询字符串参数追加到url末尾,以便将信息发送到服务器,举例:

<body>
<form method="GET" action="submit.html">
<fieldset>
<div>
<label for="name">用户名:</label>
<input type="text" id="name" name="name">
</div>
<div>
<label for="password">密码:&nbsp;&nbsp;&nbsp;</label>
<input type="password" id="password" name="password">
</div>
<button type="submit" id="send">提交</button>
<button type="reset">重置</button>
</fieldset>
</form>
<p id="holder"></p>
<script async>
function submitWithAjax(){
var form1 = document.getElementsByTagName("form")[0];
var request = new XMLHttpRequest();
var dataParts = [];
var element;
var holder = document.getElementById("holder");
// console.log(form1.elements.length);fieldset也算一个
for(var i = 0;i<form1.elements.length;i++){
element = form1.elements[i];
dataParts[i] = element.name + '=' + encodeURIComponent(element.value);
}
var data = dataParts.join("&");
request.open("GET","submit.html",true);
//request.setRequestHeader('Content-type',"application/x-www-form-urlencoded");
request.onreadystatechanged = function(){
if(request.readyState == 4){
if(request.status == 200 || request.status == 0){
var matches = request.responseText.match(/<p>([\s\S]+)<\/p>/);
if(matches.length > 0){
holder.innerHTML = matches[1];
}else{
holder.innerHTML = "<p>出错了!</p>";
}
}else{
holder.innerHTML = "<p>"+request.responseText+"</p>";
}
}
};
request.send(data);
};
var send = document.getElementById("send");
window.onload= submitWithAjax;
</script>
</body>

注意这里,GET请求传入url末尾的查询字符串需要经过正确的编码

POST请求,将数据作为请求的主体进行发送,

默认情况下服务器对提交web表单的请求和post请求是不同的处理方式,但可以使用XHR来模仿表单提交:

首先设置请求头信息

然后以适当格式创建一个字符串,

高程三介绍了自定义一个serealize()函数来进行序列化表单数据。

快乐!ajax入门(1)的更多相关文章

  1. 掌握 Ajax,第 1 部分: Ajax 入门简介

    转:http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro1.html 掌握 Ajax,第 1 部分: Ajax 入门简介 理解 Ajax 及其工作 ...

  2. AJAX入门---DOM操作HTML

    AJAX入门---DOM操作HTML 一边学习AJAX一边坐着总结加深印象.上次写的是怎样简单的使用XMLHttpRequest对象.今天写的是DOM(文档对象模型(Document Object M ...

  3. ajax入门之建立XHR对象 (1)

    ajax入门之建立XHR对象 今天帮朋友写了一个简单的ajax的demo,发现了一些东西,决定写一篇文章记录一下,避免以后挖坑. 创建XMLHttpRequest 通常 function create ...

  4. ASP.NET AJAX入门系列(4):使用UpdatePanel控件(一)

    UpdatePanel可以用来创建丰富的局部更新Web应用程序,它是ASP.NET 2.0 AJAX Extensions中很重要的一个控件,其强大之处在于不用编写任何客户端脚本,只要在一个页面上添加 ...

  5. ASP.NET AJAX入门系列(1):概述

    经常关注我的Blog的朋友可能注意到了,在我Blog的左边系列文章中,已经移除了对Atlas学习手记系列文章的推荐,因为随着ASP.NET AJAX 1.0 Beta版的发布,它们已经不再适用,为了不 ...

  6. ASP.NET AJAX入门系列

    ASP.NET AJAX入门系列将会写关于ASP.NET AJAX一些控件的使用方法以及基础知识,其中部分文章为原创,也有一些文章是直接翻译自官方文档,本部分内容会不断更新. 目录 ASP.NET A ...

  7. 系列文章--ASP.NET之AJAX入门教程

    ASP.NET AJAX入门系列将会写关于ASP.NET AJAX一些控件的使用方法以及基础知识,其中部分文章为原创,也有一些文章是直接翻译自官方文档,本部分内容会不断更新. 目录 ASP.NET A ...

  8. Ajax入门(二)Ajax函数封装

    如果看了的我上一篇博客<Ajax入门(一)从0开始到一次成功的GET请求>的话,肯定知道我们已经完成了一个简单的get请求函数了.如下: 1234567891011121314151617 ...

  9. AJAX入门---点滴的积累

    AJAX入门---点滴的积累 每次学习完一个内容总会写上几句话总结一下学习的内容.这不刚看完王兴魁老师讲的AJAX核心技术.如今回想梳理一下. 这套视频的内容不多,简单的解说了XMLHttpReque ...

  10. JavaEE的ajax入门

    JavaEE的ajax入门 代码下载 链接:https://pan.baidu.com/s/1pb_sdSmV9Ncs6UIz3q2ztg 提取码:fgx6 复制这段内容后打开百度网盘手机App,操作 ...

随机推荐

  1. 添加本地jar包到maven仓库

    mvn install:install-file -Dfile=D:\video-lib\log4j-.jar -DgroupId=video -DartifactId=log4j -Dversion ...

  2. 2018-2019-2 20165313 Exp2 后门原理与实践

    实践基础问题回答 (1)例举你能想到的一个后门进入到你系统中的可能方式? 应用程序设定后门,用户安装后,后门就可以进入.例如课堂上讲到的百度. (2)例举你知道的后门如何启动起来(win及linux) ...

  3. 《DSP using MATLAB》Problem 7.24

    又到清明时节,…… 注意:带阻滤波器不能用第2类线性相位滤波器实现,我们采用第1类,长度为基数,选M=61 代码: %% +++++++++++++++++++++++++++++++++++++++ ...

  4. java基础(三):反射、反序列化破解单列模式和解决方式

    单例模式指的是一个类只有一个对象,通过一些措施达到达到这个目的.但是反射和反序列化可以获得多个不同的对象. 先简单的认识一下单例模式 一:单例模式 通过私有构造器,声明一个该类的静态对象成员,提供一个 ...

  5. day02 格式化字符串

    字符格式化2019-04-01 方法一 通过f + {} 格式化字符串 name = input("Name: ")age = input("Age:")sco ...

  6. Spring boot中自动编译配置

    MAVEN自动编译配置 热部署功能 <dependency> <groupId>org.springframework.boot</groupId> <art ...

  7. Assets Library开发总结

    Assets Library beta版的开发工作告一段落,本着有始有终的原则,这个项目还是需要做个总结的,恩~ 先甩一个链接:https://vimeo.com/238186671 考虑到该项目开发 ...

  8. AMQP close-reason, initiated by Peer, code=406

    错误: AMQPclose-reason, initiated by Peer, code=406, text="PRECONDITION_FAILED -inequivalent arg ...

  9. 简单快速的Android打渠道包的方法

         APK其实就是ZIP的格式,所以,解压apk后,会看到里面有个META-INF目录.   思路:由于META-INF目录并不会影响到APK的签名和运行,所以我们可以在META-INF目录里添 ...

  10. Bacnet协议IP采集开发 总结

    一.开发准备     a.模拟器  VTS和BACnetDeviceSimulator b.主站  BACnetScan c.参考文档 http://wenku.baidu.com/view/3052 ...