有关jQuery.autocomplete处理返回的JSON当成字符串的解决办法教程
在网上看到的,都试过失败的情况下,终于看到可以用 eval() 函数可以解决,写下了以下的语句,请高手们指点一下。
在后台返回一个JSON格式的字符串
C#[ReadData.aspx],以下是用Response.Write();的返回结果;
[{Sid:"1",S_Title:"这是第一个JSON",S_Count:"500"},{Sid:"3",S_Title:"这是第二个JSON",S_Count:"125"},{Sid:"3",S_Title:"这是第三个JSON",S_Count:"360"}]
前台
如果要获取Sid,还要在最后设置 .result()。
var Index=-1;
$("#txtTitle").autocomplete("ReadData.aspx",{
matchContains: true,
matchCase:false,
selectFirst:false,
cacheLength:1,
delay:5,
extraParams:{status:"2",limit:"10"},
parse:function(data){
//data=rs(data); //这是如果不是返回JSON格式的字符串所要用的;
var d=eval("("+data+")"); //此处要用eval函数;
var rows=new Array();
for(var i=0;i<d.length;i++){
rows[rows.length]={data:d[i],value:d[i].Sid,result:d[i].S_Title}
}
return rows;
},
formatItem:function(row,i,max){
var Content = i+"/"+max+": [<font color='red'>"+row.Sid+"</font>] "+ row.S_Title;
if(null!=row.S_Count) Content += " [<font color=\"red\">" + row.S_Count+"</font>]";
return Content;
},
formatMatch:function(row,i,max){
return row.S_Title; //这个不知道为什么不能return row.Sid+" "+row.S_Title;
},
formatResult:function(row,i,max){
return row.S_Title; //这个不知道为什么获取不了 row.Sid;
}
}).result(function(event,data,formatted){
Index=((data!=null&&null!=data.Sid)?eval(data.Sid):-1);
});
以下是处理一个返回不是JSON格式的字符串(例如“这是第一个JSON 1\n这是第二个JSON 2\n这是第三个JSON 3”)的函数;
function rs(data){
this.Sid=new Array();
this.S_Title=new Array();
data=data.split("\n");
var json='[';
for(var i=0;i<data.length;i++){
var Num=data[i].lastIndexOf(" ");
this.S_Title[i]=data[i].substring(0,Num);
this.Sid[i]=data[i].substring(Num+1,data[i].length);
json+='{Sid:"'+this.Sid[i]+'",S_Title:"'+this.S_Title[i]+'"}';
if(i<data.length-1) json+=',';
}
json+=']';
//json='[{Sid:" ",S_Title:" "},{Sid:" ",S_Title:" "},{Sid:" ",S_Title:" "}]'; JSON的格式
return json;
}
以上代码只在IE上执行,没有在其他浏览器测试过。