ajax以及一些乱码问题

所属分类: 网络编程 / AJAX相关 阅读数: 880
收藏 0 赞 0 分享
创建xmlhttprequest 对象。

复制代码 代码如下:
return window.ActiveXObject ? new window.ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest;

次对象一个 onreadystatechange 事件。有两个属性readyState,status。简单的AJAX我们将使用到这几个东西。
以下使用到的createXMLHttp()方法就是上面这段代码!
1:以GET方式发出一个请求的实现;

复制代码 代码如下:

var get = function(url, b, callback){
var xmlhttp = createXMLHttp();
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
callback(xmlhttp.responseText);
}
}
if(b != undefined){
var arr=[],e;
for( e in b ){
arr.push(e + '=' + encodeURIComponent(b[e]));
//arr.push(e + '=' + b[e]);
// 经过测试如果不使用 encodeURIComponent 编码在IE8下无法正确传递中文
}
url += '?' + arr.join('&');
}
xmlhttp.open('GET', url, true);
xmlhttp.send();
}

// 具体这个函数的参数设置也可以根据自己的习惯来设置

使用GET方式去发送一个请求,我们是把要传递的参数格式化(a=1,b=2) 以后附加到URL的后面。
服务器页面使用获取URL参数的方式即可获得。(比如Php: $_GET["a"]);
值得注意的是我们在格式化参数的时候 使用到一个 encodeURIComponent()方法进行了编码是为了不出现乱码;
其实有3个方法可以完成这个工作。escape,encodeURI,encodeURIComponent,大家可以查下资料。前两个方法对于一些特殊字符还是没有进行编码。
所以使用第3个是比较好的选择了。
如果你不使用编码直接发送数据,各个浏览器的表现可能不一样。比如IE你在发送中文数据的时候就会出现乱码(当然出现乱码的情况还很多,请接着看..)。

2:以POST方法发送一个请求的实现
复制代码 代码如下:

var ajax = function(a){
var xmlhttp = createXMLHttp();
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200 ){
a.success(xmlhttp.responseText);
} else return xmlhttp;
}
xmlhttp.open('POST', a.url, true);
// 请求为post的时候 必须设置头信息
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
// 序列化要发送的数据
var c = [];
for(var e in a.data){
c.push(e + '=' + encodeURIComponent(a.data[e]));
// 经过测试 经过URL编码以后更能够保证发送数据的正确性。
      //不编码可能造成部分特殊字符不能正确发送
}
a.data = c.join('&');
xmlhttp.setRequestHeader("Content-length", c.length); // 好像是可选
xmlhttp.setRequestHeader("Connection", "close"); // 好像是可选
xmlhttp.send(a.data);
// 次数据发送以后服务端 使用 post 获取数据 比如php $_POST['a'];
}

参数a是一个对象 他包含 {url:"http:...",data:{a:1,b2},success:function(){}}
             地址 数据 成功回调函数  
使用POST方法发出请求。数据也必须格式化(a=1,b=2) ;不过跟GET方法不一样的地方是 我们是把数据写在了send()方法里(xmlhttp.send(a.data);)。
服务器页面使用获取表单数据的方式即可获得。(比如Php: $_POST["a"]);
值得注意的是在使用post发送请求的时候 我们必须设置请求的头信息。
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
经过测试如果不设置Content-type为application/x-www-form-urlencoded;服务器页面是无法获取到通过send()方法发送的数据。

最后 关于乱码的问题。上面已经有两个地方会出现错误了。
1:比如参数没有进行编码直接传递,会出现传递不成功的问题。
2:在使用POST方法的时候没有设置Content-type,服务器页面无法获取发送过来的参数;
3:发送请求页面与请求页面的编码问题。在标准浏览器下请一定保持请求页面和被请求页面的编码方式是utf-8,不然中文会很悲剧。
复制代码 代码如下:

<!--<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />-->
<!--// 经过测试 不使用上面的meta 申明charset在IE下会出现乱码-->
<!--
* header("Content-Type: text/html; charset=gb2312");
被调用的AJAX页面使用了gb2312的编码 在chorme下出现了乱码。
在IE下正常访问
-->


上面这里出现乱码的情况非常乱,不好排除。所以保持两个页面编码为UTF-8 参数编码后在传递。可以有效防止乱码
我测试的几个文件打包 http://xiazai.jb51.net/201008/yuanma/ajax_php.rar
更多精彩内容其他人还在看

理解jquery ajax中的datatype属性选项值

jquery中ajax的dataType属性用于指定服务器返回的数据类型,如果不指定,jQuery 将自动根据HTTP包MIME信息来智能判断,如果datatype选项不填写的话,会将返回的数据当成字符串处理。
收藏 0 赞 0 分享

基于Jquery ajax技术实现间隔N秒向某页面传值

这篇文章给大家介绍jquery ajax技术实现每隔一段时间向某页面传值,以及setinterval()方法的语法介绍,对本文感兴趣的朋友可以参考下
收藏 0 赞 0 分享

通过Ajax两种方式讲解Struts2接收数组表单的方法

使用struts2表单传值,可以传一个或者是作为一个对象的各个属性传,都非常灵活便捷。但是如果我们需要传一个数组并希望struts正确接收,该怎么处理呢?接下来,通过本文给大家介绍通过Ajax两种方式讲解Struts2接收数组表单的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

基于Jquery.history解决ajax的前进后退问题

本文主要给大家介绍基于Jquery.history解决ajax的前进后退问题,涉及到jquery前进后退相关方面的知识,本文内容经典,非常具有参考价值,特此把jquery前进后退相关知识分享在脚本之家网站供大家参考
收藏 0 赞 0 分享

使用HTML5中postMessage知识点解决Ajax中POST跨域问题

这篇文章主要介绍了使用HTML5中postMessage知识点解决Ajax中POST跨域问题的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

谈谈你对aja的理解(一、二)

Ajax是Asynchronous Javascript And XML的缩写,其作用通过Ajax可以使用Javascript语句来调用XMLHttpRequest对象,直接与服务器进行通讯,可以在不重载页面的情况下与服务器交换数据。
收藏 0 赞 0 分享

关于ajax对象一些常用属性、事件和方法大小写比较常见的问题总结

最近比较空闲,于是抽个时间整理些关于ajax方法的东东。在项目中经常发现ajax板块好多问题都是属性,方法,事件大小写不区分问题,最终导致了程序运行出现麻烦,下面给大家介绍关于ajax对象一些常用属性、事件和方法大小写比较常见的问题总结
收藏 0 赞 0 分享

Ajax请求session失效该如何解决

HTML + Servlet + Filter + jQuery 一般来说我们的项目都有登录过滤器,一般请求足以搞定。但是AJAX却是例外的,所以解决方法是设置响应为session失效。
收藏 0 赞 0 分享

编写轻量ajax组件02--浅析AjaxPro

ajaxpro虽然是一个比较老的组件,不过实现思想和源码还是很有借鉴价值的。接下来通过本篇文章给大家介绍编写轻量ajax组件02--浅析AjaxPro,感兴趣的朋友可以参考下
收藏 0 赞 0 分享

编写轻量ajax组件01-与webform平台上的各种实现方式比较

这篇文章主要介绍了编写轻量ajax组件01-与webform平台上的各种实现方式比较,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多