http请求ajax返回数据jsonjson为什么带@ type

最近在模拟post json数据到服务端,然后返回json信息,当然也要实现模拟服务端的代码,服务单可以用controller实现,但是发现一个问题,就是返回来的是个页面,页面中才包含返回的json数据,怎么取出去来了,网上博客一般写的都是客户端的post,后来猛然想到以前和老师学安卓的时候的有段代码就是把返回的json数据放在页面上,才发现可以用getWriter()把页面中的json数据单独打在页面中代码实现如下:模拟的服务端: @RequestMapping(value = "/loginTest", method = RequestMethod.POST)
public void test(HttpServletRequest request,HttpServletResponse response) throws Exception {
//JSONObject json=JSONObject.fromObject(data);
// 读取请求内容
BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));
String line = null;
StringBuilder sb = new StringBuilder();
while((line = br.readLine())!=null){
sb.append(line);
}
// 将资料解码
String reqBody = sb.toString();
JSONObject json=JSONObject.fromObject(reqBody);
String data = "{'isAdmin':'true', 'usename':wsf}";
PrintWriter writer = response.getWriter();
writer.write(data);
//这里是你要返回的字符串
writer.flush();
writer.close();
} 模拟的发送端:
/**
* @file TestPost.java
* @date 2016年9月10日
* @version 3.4.1
*
* Copyright (c) 2013 Sihua Tech, Inc. All Rights Reserved.
*/
package cn.com.dongyaTest.controller;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import net.sf.json.JSONObject;
/**
*
*
* @author chengjian.he
* @version
3.4, 2016年9月10日 下午3:03:50
* @since
Yeexun 3.4
*/
public class TestPost {
public static int postBody(String urlPath, String data) throws Exception {
try{
// Configure and open a connection to the site you will send the request
URL url = new URL(urlPath);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
// 设置doOutput属性为true表示将使用此urlConnection写入数据
urlConnection.setDoOutput(true);
// 定义待写入数据的内容类型,我们设置为application/x-www-form-urlencoded类型
urlConnection.setRequestProperty("content-type", "application/x-www-form-urlencoded");
// 得到请求的输出流对象
OutputStreamWriter out = new OutputStreamWriter(urlConnection.getOutputStream());
// 把数据写入请求的Body
out.write(data);
out.flush();
out.close();
// 从服务器读取响应
InputStream inputStream = urlConnection.getInputStream();
String encoding = urlConnection.getContentEncoding();
String body = IOUtils.toString(inputStream, encoding);
if(urlConnection.getResponseCode()==200){
return 200;
}else{
throw new Exception(body);
}
}catch(IOException e){
throw e;
}
}
public static JSONObject doPost(String url,JSONObject json){
DefaultHttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(url);
JSONObject response = null;
try {
StringEntity s = new StringEntity(json.toString());
s.setContentEncoding("UTF-8");
s.setContentType("application/json");//发送json数据需要设置contentType
post.setEntity(s);
HttpResponse res = client.execute(post);
if(res.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
HttpEntity entity = res.getEntity();
String result = EntityUtils.toString(res.getEntity());// 返回json格式:
response = JSONObject.fromObject(result);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return response;
}
public static void main(String[] args) {
try {
// String data = "{'username':'shihuan', 'password':123456}";
//TestPost.postBody("http://localhost:8009/wechatyeexun/loginTest.do", data);
String url = "http://localhost:8009/wechatyeexun/loginTest.do";
JSONObject params = new JSONObject();
params.put("username", "wsf");
params.put("password", "123");
String ret = doPost(url, params).toString();
System.out.println(ret);
/* final String APPLICATION_JSON = "application/json";
final String CONTENT_TYPE_TEXT_JSON = "text/json";
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.addHeader(HTTP.CONTENT_TYPE, APPLICATION_JSON);
StringEntity se = new StringEntity(params.toString());
se.setContentType(APPLICATION_JSON);
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, APPLICATION_JSON));
httpPost.setEntity(se);
httpClient.execute(httpPost);*/
} catch (Exception e) {
e.printStackTrace();
}
}
}
当然,也可以用火狐的Poster直接测试更方便,下面时候返回来的json数据,希望对你有所帮助
}
小编推荐:Fundebug提供JS错误监控、微信小程序错误监控、微信小游戏错误监控,Node.j错误监控和Java错误监控。真的是一个很好用的错误监控费服务,众多大佬公司都在使用。 很早之前就在看web前端面试题,一直想总结一个比较全面又详细的面试题库,现在总结了一些,分享给大家,以后还会持续更新,有些题目有多种答案,本文只给出其中一种,哪里有问题的欢迎指出。Html&CSS 1、谈谈你对web标准的理解 web标准的理解 2、列举html中至少三个实体 &、  、<、>、®、©详细请看w3schoolHTML实体符号参考手册w3schoolHTML实体符号参考手册 3、cellpadding与cellspacing有何区别? cellpadding:代表单元格边框到内容之间的距离(留白)cellspacing:cellspacing属性用来指定表格各单元格之间的空隙。此属性的参数值是数字,表示单元格间隙所占的像素点数。 4、CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算? CSS3新增伪类有哪些? 1.id选择器( # myid)2.类选择器(.myclassname)3.标签选择器(div, h1, p)4.相邻选择器(h1 + p)5.子选择器(ul > li)6.后代选择器(li a)7.通配符选择器( *)8.属性选择器(a[rel = "external"])9.伪类选择器(a: hover, li: nth - child)**可继承的样式: **font-size font-family color, UL LI DL DD DT;不可继承的样式:border padding margin width height优先级优先级就近原则,同权重情况下样式定义最近者为准,载入样式以最后载入的定位为准;优先级为:!important > id > class > tagimportant 比 内联优先级高CSS3新增伪类举例p:first-of-type 选择属于其父元素的首个

元素的每个

元素。p:last-of-type 选择属于其父元素的最后

元素的每个

元素。p:only-of-type 选择属于其父元素唯一的

元素的每个

元素。p:only-child 选择属于其父元素的唯一子元素的每个

元素。p:nth-child(2) 选择属于其父元素的第二个子元素的每个

元素。:enabled :disabled 控制表单控件的禁用状态。:checked 单选框或复选框被选中。 5、display与visibility有何异同? display可以有很多值,visibility只有两个常用值:visible、hidden。当display为none、visibility为hidden时都会隐藏元素。但display会隐藏掉元素空间,visibility会保留元素空间。 6、怎么在网页中实现绝对定位? absolute绝对定位与相对定位 7、table-layout、border-collapse有何用途? ①table-layout:设置表格是否自动调整宽高②border-collapse:表格与单元格及单元格间的边框是否融合在一起。 8、简述盒模型 简述盒模型 9、链接标记target属性的_top、_parent、_blank、main、left、top各有何用处? 链接标记target与Dom,Bom 10、你对浏览器兼容怎么看?通常你都做哪些处理? 浏览器的兼容性 11、get和post的区别? GET:一般用于信息获取,使用URL传递参数,对所发送信息的数量也有限制,一般在2000个字符POST:一般用于修改服务器上的资源,对所发送的信息没有限制。GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值,也就是说Get是通过地址栏来传值,而Post是通过提交表单来传值。然而,在以下情况中,请使用 POST 请求:①无法使用缓存文件(更新服务器上的文件或数据库)向服务器发送大量数据(POST 没有数据量限制)。②发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠。 12、xhtml和html有什么区别 ①HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言②最主要的不同:XHTML 元素必须被正确地嵌套。XHTML 元素必须被关闭。标签名必须用小写字母。XHTML 文档必须拥有根元素。 13、行内元素有哪些?块级元素有哪些?空(void)元素有那些?行内元素和块级元素的区别是什么?行内块元素的兼容性使用?(IE8 以下) 块级元素:div p h1 h2 h3 h4 form ul ol dl dt dd行内元素: a b br i span input select image strong(强调的语气)常见空元素:
/


////不常见空元素://///////行内元素:会在水平方向排列,不能包含块级元素,设置width无效,height无效(可以设置line-height),margin上下无效,padding上下无效。块级元素:各占据一行,垂直方向排列。从新行开始结束接着一个断行。兼容性:display:inline-block;*display:inline;*zoom:1; 14、CSS引入的方式有哪些? link和@import的区别是? CSS引入的方式包括内联 内嵌 外链 导入link和@import的区别是 :①link属于XHTML标签,除了加载CSS外,还能用于定义RSS, 定义rel连接属性等作用;而@import是CSS提供的,只能用于加载CSS;②页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;③import是CSS2.1 提出的,只在IE5以上才能被识别,而link是XHTML标签,无兼容问题;④后者优先级更高 15、你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么?介绍一下你对浏览器内核的理解 Ie(Ie内核) 火狐(Gecko) 谷歌(webkit) opera(blink)对内核的理解:主要分成两部分:渲染引擎(layout engineer或Rendering Engine)和JS引擎。①渲染引擎:负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),以及计算网页的显示方式,然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要内核。②JS引擎:解析和执行javascript来实现网页的动态效果。最开始渲染引擎和JS引擎并没有区分的很明确,后来JS引擎越来越独立,内核就倾向于只指渲染引擎。 16、解释css sprites,如何使用。 Css 精灵 把一堆小的图片整合到一张大的图片上,减轻服务器对图片的请求数量。适用于以下情况:①静态图片,不随用户信息的变化而变化②小图片,图片容量比较小③加载量比较大 17、清除浮动的几种方式,各自的优缺点 (1)父级div定义height。(2)结尾处加空div标签clear:both。(3)父级div定义伪类:after和zoom。(4)父级div定义overflow:hidden。(5)父级div定义overflow:auto。(6)父级div也浮动,需要定义宽度。(7)父级div定义display:table。(8)结尾处加br标签clear:both。比较好的是第3种方式,好多网站都这么用。 18、Doctype作用?标准模式与兼容模式各有什么区别? ①告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。②标准模式的排版和JS运作模式都是以该浏览器支持的最高标准运行。在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作。注意点:HTML5 只需要写不需要对DTD进行引用,因为HTML5不基于 SGML,因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为(让浏览器按照它们应该的方式来运行)。而HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型。 19、iframe有哪些缺点? ①iframe会阻塞主页面的Onload事件,搜索引擎的检索程序无法解读这种页面,不利于SEO;②iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。使用iframe之前需要考虑这两个缺点。如果需要使用iframe,最好是通过javascript动态给iframe添加src属性值,这样可以绕开以上两个问题。 20、如何实现浏览器内多个标签页之间的通信? ①通过WebSocket、SharedWorker来实现;②也可以调用localstorge、cookies等本地存储方式。localstorge另一个浏览上下文(另一个标签页)里被添加、修改或删除时,它都会触发一个事件,我们通过监听事件,控制它的值来进行页面信息通信。注意quirks:Safari 在无痕模式下设置localstorge值时会抛出 QuotaExceededError 的异常。 21、如何在页面上实现一个圆形的可点击区域? ①map+area或者svg②border-radius③纯js实现 需要求一个点在不在圆上简单算法、获取鼠标坐标等等 22、CSS3有哪些新特性? ① CSS3实现圆角(border-radius:8px),阴影(box-shadow:10px);② 对文字加特效(text-shadow、),线性渐变(gradient),旋转(transform);③ transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);//旋转,缩放,定位,倾斜④ 增加了更多的CSS选择器 多背景 rgbaCSS3新增属性Html5 1、Html5与html4相比,各有何优缺点? 怎样处理html5新标签的兼容性问题? html5余html4的异同请看以下的链接html5与html4的异同兼容性问题IE8/IE7/IE6支持通过document.createElement方法产生的标签,可以利用这一特性让这些浏览器支持HTML5新标签,浏览器支持新标签后,还需要添加标签默认的样式。当然也可以直接使用成熟的框架、比如html5shim。 Javascript 1、JS如何使页面跳转?怎么引入一个外部JS文件? ①直接在head标签内写入js代码,如下 ②引入写好的js文件,使用语句 也是直接放入到head标签里头,也有的是放在前面。 2、输入框的验证用什么事件? change(fn) 3、undefined与null有何异同? null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。undefined:(1)变量被声明了,但没有赋值时,就等于undefined。(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。(3)对象没有赋值的属性,该属性的值为undefined。(4)函数没有返回值时,默认返回undefined。null:(1) 作为函数的参数,表示该函数的参数不是对象。(2) 作为对象原型链的终点。它们都表示空,转换为boolean后都为false,但是null代表一个对象变量已经被初始化,但未装入对象;undefined表示未初始化变量 4、===与==有何异同? 相同点:都是判定两个值是否相等不同点:==不会判断类型,而===会判断类型 5、如何判断一个变量的值是否为数字?以及有哪些手段判断变量值的数据类型? 全局函数isNaN可以判断一个变量的值是否为数字。可以使用运算符type、instanceof判断变量值的数据类型。 6、什么是Bom什么是Dom?你如何理解Dom? 链接标记target与Dom,Bom 7、Array的join、push、splice、slice各有何用途,splice与slice有何异同? join:使用指定间隔符连接所有元素为字符串push:在尾部添加元素并维护array实例的lengthsplice与slice都是截取一部分元素。不同的在于:slice返回截取后的新实例,splice在原array实例上操作,更详细的请见下文链接。JS中数组对象详解 8、如何阻止表单提交? 在onsubmit事件中返回false 9、如何动态操作表格? 可以像普通dom一样操作,但是因为表格的dom比较复杂,所以我通常是使用table的insertRow、deleteRow及tr对象的insetCell、deleteCell操作。 10、String.match与RegExp.exec有何区别? match只会返回没有分组的全部匹配结果或者有分组的第一次匹配结果;而exec可以利用循环返回全部匹配结果。 11、为验证手机号写一个正则。 function checkSubmitMobil(){if ($("#phoneNum").val() == "") {alert("手机号码不能为空!");//$("#moileMsg").html("手机号码不能为空!"); $("#mobile").focus();return false;} if (!$("#phoneNum").val().match(/^(?:13\d|15\d|18\d)\d{5}(\d{3}|\*{3})$/)) {alert("手机号码格式不正确!");//$("#moileMsg").html("手机号码格式不正确!请重新输入!"); $("#phoneNum").focus();return false;}return true; } 12、正则的i标记与g标记各有何用途? i:不区分大小写;g:全局匹配。 13、为String添加trim()方法。 String.prototype.trim = function() {return this.replace(/^ + +$/g,""); } 14、简述COOKIE。在JS中如何操作Cookie? 简述cookie,在JS中如何操作cookie 15、谈谈javascript数组排序方法sort()的使用,重点介绍sort()参数的使用及其内部机制。 JS数组排序方法sort()的使用 16、谈谈innerHTML outerHTML innerText之间的区别。 ①innerHTML是w3c的html dom定义的方法,而后两者是IE独有的方法;②innerHTML代表一个元素节点内由所有子节点,不包括当前节点组成的html代码;③outerHTML代表一个元素节点内由所有子节点和当前节点组成的html代码;④innerText代表一个元素节点内由所有子文本节点内容组成的文本; 17、在JavaScript中定时调用函数 foo() 如何写? setTimeout(foo,1000 //这里设置延时数 ); 18、setTimeout与setInterval有何区别? ①setTimeout和setInterval的语法相同。它们都有两个参数,一个是将要执行的代码字符串,还有一个是以毫秒为单位的时间间隔,当过了那个时间段之后就将执行那段代码。②不过这两个函数还是有区别的,setInterval在执行完一次代码之后,经过了那个固定的时间间隔,它还会自动重复执行代码,而setTimeout只执行一次那段代码。 19、你在js中用过array吗?如果用过,array中添加数据用什么方法? 在尾部添加使用push();在头部添加使用unshift();在任意位置添加使用splice(),但要注意把它的删除个数设置为0;array详细介绍请看下文链接JS中数组对象详解 20、简述javascript的优缺点。 优点:简单易用,与Java有类似的语法,可以使用任何文本编辑工具编写,只需要浏览器就可执行程序,并且事先不用编译,逐行执行,无需进行严格的变量声明,而且内置大量现成对象,编写少量程序可以完成目标;缺点:不适合开发大型应用程序; 21、Javascript有哪些内置对象? 只有Math和Global(在浏览器环境中,Global就是Window) 22、列举Javascript的本地对象。 Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError 23、javascript的typeof返回哪些数据类型 object number function boolean undefind string 24、例举3种强制类型转换和2种隐式类型转换? 强制(parseInt,parseFloat,number)隐式(== – ===) 25、IE和DOM事件流的区别 ①执行顺序不一样、②参数不一样③事件加不加on④this指向问题 26、事件绑定和普通事件有什么区别 ①事件绑定就是针对dom元素的事件,绑定在dom元素上②普通事件即为非针对dom元素的事件 27、事件委托是什么 利用事件冒泡的原理,让自己的所触发的事件,由他的父元素代替执行!通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这个事件。例子请看以下链接JS中的事件委托 28、闭包是什么,有什么特性,对页面有什么影响 什么是闭包“官方”的解释:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。在 Scala、Scheme、Common Lisp、Smalltalk、Groovy、JavaScript、Ruby、 Python、Go、Lua、objective c、swift 以及Java(Java8及以上)等语言中都能找到对闭包不同程度的支持。通俗的讲就是函数a的内部函数b,被函数a外部的一个变量引用的时候,就创建了一个闭包。闭包的特性:①.封闭性:外界无法访问闭包内部的数据,如果在闭包内声明变量,外界是无法访问的,除非闭包主动向外界提供访问接口;②.持久性:一般的函数,调用完毕之后,系统自动注销函数,而对于闭包来说,在外部函数被调用之后,闭包结构依然保存在;对页面的影响使用闭包会占有内存资源,过多的使用闭包会导致内存溢出等。详细请看以下推荐链接深入理解JavaScript的闭包特性 如何给循环中的对象添加事件 29、javascript的本地对象,内置对象和宿主对象 ①本地对象为array obj regexp等可以new实例化②内置对象为gload Math 等不可以实例化的③宿主为浏览器自带的document,window 等 30、编写一个数组去重的方法 思路:1.创建一个新的数组存放结果2.创建一个空对象3.for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。说明:至于如何对比,就是每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。代码如下:Array.prototype.unique3 = function(){var res = [];var json = {};for(var i = 0; i < this.length; i++){if(!json[this[i]]){res.push(this[i]);json[this[i]] = 1;}}return res; } var arr = [112,112,34,'你好',112,112,34,'你好','str','str1']; alert(arr.unique3()); 31、this对象的理解 ①this总是指向函数的直接调用者(而非间接调用者);②如果有new关键字,this指向new出来的那个对象;③在事件中,this指向触发这个事件的对象,特殊的是,IE中的attachEvent中的this总是指向全局对象Window; 32、eval是做什么的? ①它的功能是把对应的字符串解析成JS代码并运行;②应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。③由JSON字符串转换为JSON对象的时候可以用eval,var obj =eval('('+ str +')'); 33、new操作符具体干了什么呢? ①创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。②属性和方法被加入到 this 引用的对象中。③新创建的对象由 this 所引用,并且最后隐式的返回 this 。 34、call() 和 apply() 的区别和作用? ①apply()函数有两个参数:第一个参数是上下文,第二个参数是参数组成的数组。如果上下文是null,则使用全局对象代替。如:function.apply(this,[1,2,3]);②call()的第一个参数是上下文,后续是实例传入的参数序列。如:function.call(this,1,2,3); 如何获取UA JS代码function whatBrowser() { document.Browser.Name.value=navigator.appName; document.Browser.Version.value=navigator.appVersion; document.Browser.Code.value=navigator.appCodeName; document.Browser.Agent.value=navigator.userAgent; } 35、请解释一下 JavaScript 的同源策略 概念:同源策略是客户端脚本(尤其是Javascript)的重要的安全度量标准。它最早出自Netscape Navigator2.0,其目的是防止某个文档或脚本从多个不同源装载。这里的同源策略指的是:协议,域名,端口相同,同源策略是一种安全协议。指一段脚本只能读取来自同一来源的窗口和文档的属性。为什么要有同源限制?我们举例说明:比如一个黑客程序,他利用Iframe把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名,密码登录时,他的页面就可以通过Javascript读取到你的表单中input中的内容,这样用户名,密码就轻松到手了。 36、请描述一下 cookies,sessionStorage 和 localStorage 的区别? cookie在浏览器和服务器间来回传递。 sessionStorage和localStorage不会sessionStorage和localStorage的存储空间更大;sessionStorage和localStorage有更多丰富易用的接口;sessionStorage和localStorage各自独立的存储空间;Ajax 1、什么是Ajax? Ajax(Asynchronous JavaScript + XML),即异步JavaScript + XML的缩写,主要用来页面异步刷新,也是构建RIA的一种基础技术。 2、如何使用Ajax从服务器获取数据? ①创建XMLHttpRequest对象,注意兼容IE6的情况②使用XMLHttpRequest对象的open方法,其中有三个参数:a.字符串,代表html的请求:GET,POST。b.要访问的服务器的URL。c.Boolean值,true表示异步,flase表示同步,一般情况下是异步,默认为true。③ajax的回调函数。xhr.readyState==4表示请求已经结束,服务器响应完成。status表示http请求的状态,200表示正常响应;404表示资源找不到;500表示服务器端错误。④发送ajax请求。如果没有数据,可以不传或者传递null;如果post请求传递数据:首先设置xhr的请求头信息:xhr.setRequestHeader("Content-type","application/x-www-formurlencoded"); 再传递参数:xhr.send(name=liujianhong&password=123); 3、解释XMLHttpRequest是什么? XMLHttpRequest是我们得以实现异步通讯的根本。最早在IE5 中以ActiveX组件实现;最近,Mozilla 1.0和Safari 1.2中实现为本地对象。XMLHttpRequest虽然不是W3C标准,但却得到了FireFox、Safari、Opera、Konqueror、IE等绝大多数浏览器的支持。 4、谈谈你对Ajax的理解。你在项目中如何使用Ajax?手写一个简单的Ajax操作。 Ajax(Asynchronous JavaScript + XML),即异步JavaScript + XML的缩写,主要用来页面异步刷新,也是构建RIA的一种基础技术。因为它涉及浏览器兼容、跨域等问题,在项目中一般会使用一些基础类库辅助实现,如jQuery等。一个简单的Ajax操作如下。var xhr = new XMLHttpRequest(); //在环境中需要做浏览器兼容,这里省略了 xhr.onreadystatechange = function() { //这里注册当xhr状态发生改变后调用事件 if( xhr.readyState == 4 ) { //通常在读取状态为4的时候才能获取到部分数据 所以一般状态在4的时候才进行处理 if(status==200) {//当正常请求到资源时的处理, 可以调用xhr.responseText或xhr.responseXml获取数据}else {//当请求资源失败时的处理}} } xhr.open( "GET", url); //设置xhr的请求方式和url,这里使用的是GET方式,//如果有参数,则连接在url后面/*如果是POST请求,还当设置请求的Content-Type数据使用send作为参数发送*/ xhr.send(); 5、谈谈你对JSON的理解。 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。所以它往往在AJAX中替代XML,交换数据。 6、你的项目中有使用到跨域吗?你在项目中是如何处理JS跨域问题的? ①有。②主要是使用其它网站提供的javascript api如QQ。使用script的src可以直接读取跨域资源。③当然跨域还有其它处理方式:如代理服务器、改变domain、JSONP等。 7、你在项目中有使用到网页到服务器的即时通信吗?说说你都采用什么手段处理以及你所知道的处理办法? 没有用到,但我知道html的websockets、flash的socket、ajax长轮询等都可以实现。 8、你在AJAX中有遇到乱码吗?如果遇到,你是如何解决的? ①遇到过。②一般我首先统一页面和服务器编码,对请求和响应的Content-Type设置正确编码;对请求参数进行编码处理。 9、解释jsonp的原理,以及为什么不是真正的ajax ①Ajax与JSONP这两种技术看起来很像,目的也一样,都是请求一个url,然后把服务器返回的数据进行处理,因此jQuery等框架都把JSONP作为Ajax的一种形式。②实际上Ajax与JSONP有着本质上的不同。Ajax的核心是通过XMLHttpRequest获取数据,而JSONP的核心则是动态添加