手机
当前位置:查字典教程网 >编程开发 >AJAX相关 >ajax以及一些乱码问题
ajax以及一些乱码问题
摘要:创建xmlhttprequest对象。复制代码代码如下:returnwindow.ActiveXObject?newwindow.Activ...

创建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,不然中文会很悲剧。

复制代码 代码如下:

<>

<>

<>

上面这里出现乱码的情况非常乱,不好排除。所以保持两个页面编码为UTF-8 参数编码后在传递。可以有效防止乱码

我测试的几个文件打包 http://xiazai.jb51.net/201008/yuanma/ajax_php.rar

【ajax以及一些乱码问题】相关文章:

有关Ajax中get和post的使用问题

也写一个Ajax.Request类附代码

STRUTS+AJAX+JSP 请求到后台乱码问题解决方法

ajax给全局变量赋值问题解决示例

iframe式ajax调用示例代码

浅析JSONP之解决ajax跨域问题

ajax传递多个参数的实现代码

JQuery中Ajax的Post提交在IE下中文乱码的解决方法

ajax+php中文乱码解决办法

深入理解ajax系列第一篇之XHR对象

精品推荐
分类导航