各位js高手,为什么程序提示ReferenceError: encodeURLComponent is not defined???

// JavaScript Document

//ajax兼容性检测
function createXHR() {
if (typeof XMLHttpRequest != "undefined") {
return new XMLHttpRequest();
} else if (typeof ActiveXObject != "undefined") {
if (typeof arguments.callee.activeXString != "string") {
var versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"];
for (var i = 0, len = versions.length; i < len; i++) {
try {
var xhr = new ActiveXObject(versions[i]);
arguments.callee.activeXString = versions[i];
return xhr;
} catch (e) {
//跳过
}
}
}
return new ActiveXObject(arguments.callee.activeXString);
} else {
throw new Error("你的浏览器或系统不支持XHR对象!");
}
}

//Ajax 封装函数
function ajax(obj){
var xhr=new createXHR();
obj.url=obj.url+'?rand='+Math.random()+'&'+params(obj.data);
//obj.data=params(obj.data);
if(obj.method==='get')obj.url+=obj.url.indexOf('?')==-1?
'?'+obj.data:'&'+obj.data;

if(obj.async===true){ //同步
xhr.onreadystatechange=function(){
if(xhr.readyState==4){
callback(); //回调函数
}
};
}
xhr.open(obj.mehtod,obj.url,obj.async);
if(obj.method==='post'){
xhr.setRquestHeader('Content-Type','application/x-www-form-urlencode');
xhr.send(obj.data);
}else{
xhr.send(null);
}

if(obj.async===false){ //异步
callback(); //回调函数
}

function callback(){ //同步和异步共同的函数
if(xhr.status==200){
obj.success(xhr.responeText); //回调
}else{
alert('数据返回失败!状态代码:'+xhr.status+'.状态信息:'+xhr.statusText);
}
}
}

//名值对转换成字符串
function params(data){
var arr=[];
for(var i in data)
{
arr.push(encodeURLComponent(i)+'='+encodeURLComponet(data[i]));
}
}

//封装addEvent事件监听事件
function addEvent( obj, type, fn) {
if ( obj.attachEvent ) {
obj['e'+type+fn] = fn;
obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
obj.attachEvent( 'on'+type, obj[type+fn] );
} else
obj.addEventListener( type, fn, false );
}

// 调用ajax
addEvent(document,'click',function(){ //IE6 , addEvent需要重写。
ajax({
method:'get',
url:'ajax.php',
data:{
'name':'Lee',
'age':100
},
success:function(text){
alert(text);
},
async:false //表示异步
});

});

第1个回答  2016-05-04
js中没有encodeURLComponent这个方法
只有
encodeURIComponent
注意中间的URL和URI的区别。追问

ReferenceError: encodeURIComponet is not defined
arr.push(encodeURIComponent(i)+'='+encodeURIComponet(data[i]));

还是没有反应呢??
后面的
data:{
'name':'Lee',
'age':100
},
打印不出来 显示undefined ,亲可以测试一下

追答

第二个encodeURIComponent拼写错误,少了个n,
然后确保data是一个object对象

追问

可以弹窗了,但 data 还是undefined 呢,能帮忙调试一下吗?

追答

从代码上看你的后台应该使用了PHP返回两条数据,第一条数据为空,第二条数据中第二个key为undefined,因此data在遍历时取到的key就是undefined,有可能是后台的某些逻辑不对,可以从后台逻辑开始排除下错误。返回值类型最好是json格式的,这样data才能正确解析。

追问


这是我的PHP代码,上面是我的全部js代码,html引用一下就可以了,可以贴一下代码出来吗?我搞了一天,蒙圈了。。。

追答

ajax是异步取数据用的,你的php代码只是接收了从客户端传过去的{'name':'Lee',
'age':100},并没有用这些数据做什么操作,也就是没有任何返回值,这样ajax的调用结果是没有任何数据的,也就是undefined。可以尝试在后台返回一些数据,比如
echo json_encode(array('name'=>"Lee"));

本回答被提问者采纳