jquery Ajax程序对PHP程序返回的字符串进行切分就总是出问题

WBOY
Release: 2016-06-23 14:15:20
Original
950 people have browsed it

比如PHP程序 输出一个

echo 'yt|'.$row["dig"];

Ajax程序对其进行切分:
function Dig(id) {   //当单击投一票链接时
var content = document.getElementById("dig"+id);    //获取显示“投一票”的元素
   //获取显示票数的元素,其id属性值为一个数字,类似id="3"
var dig = document.getElementById(id);
$.ajax({
  type: "get",
  url: "service.php",
  data: {id:id,n:Math.random()},    //发送记录id给service.asp
   beforeSend:function(){$(dig).html('jquery Ajax程序对PHP程序返回的字符串进行切分就总是出问题');}, 
success: function(data){   //处理返回的数据
r=data.split("|");
alert(r[0]);
 if(r[0] == "yt" ) {   //已经投过票的情况
                $(content).html("您已经投过票了!");
                $(dig).html(r[1]);   //显示原来的票数
                    }
             else if(data == "NoData") //没有找到记录
{ alert("参数错误!"); }
   else{
$(dig).html(data);  //服务器修改成功,更新票数
$(content).html("投票成功"); //将投一票改成投票成功
setTimeout("rightinfo("+id+")",3000); //3秒后调用rightinfo(id)
                    } }}); }
就总是切分不出来,
经测试,问题在于r[0] == "yt" 返回的是false。但用alert(r[0]);输出结果是yt,但yt上面好像还有一空行。
以前用ASP程序输出就根本不存在这样的问题,以前是:
Response.Write("yt"&","&rs("Dig"))
这个问题网上也查不到,请问是什么原因啊


回复讨论(解决方案)

1、确认你的php文件前面没有空行
2、如果你的文件是utf-8编码,确认无bom头

比如PHP程序 输出一个

echo 'yt|'.$row["dig"];

Ajax程序对其进行切分:
function Dig(id) {   //当单击投一票链接时
var content = document.getElementById("dig"+id);    //获取显示“投一票”的元素
   //获取显示票数的元素,其id属性值为一个数字,类似id="3"
var dig = document.getElementById(id);
$.ajax({
  type: "get",
  url: "service.php",
  data: {id:id,n:Math.random()},    //发送记录id给service.asp
   beforeSend:function(){$(dig).html('jquery Ajax程序对PHP程序返回的字符串进行切分就总是出问题');}, 
success: function(data){   //处理返回的数据
r=data.split("|");
alert(r[0]);
 if(r[0] == "yt" ) {   //已经投过票的情况
                $(content).html("您已经投过票了!");
                $(dig).html(r[1]);   //显示原来的票数
                    }
             else if(data == "NoData") //没有找到记录
{ alert("参数错误!"); }
   else{
$(dig).html(data);  //服务器修改成功,更新票数
$(content).html("投票成功"); //将投一票改成投票成功
setTimeout("rightinfo("+id+")",3000); //3秒后调用rightinfo(id)
                    } }}); }
就总是切分不出来,
经测试,问题在于r[0] == "yt" 返回的是false。但用alert(r[0]);输出结果是yt,但yt上面好像还有一空行。
以前用ASP程序输出就根本不存在这样的问题,以前是:
Response.Write("yt"&","&rs("Dig"))
这个问题网上也查不到,请问是什么原因啊
先对返回的值去掉前后空格
trim(data),当然也可以对trim(r[0])去空格

不是啊,确实没有空格,我想了很多办法,比如用trim函数去空格,或者用intval转换为整形都没用。我的文件是gb2312编码,前面有header("Content-type: text/html; charset=gb2312"); ,

我就是简单地把ASP程序的rs改成php的$row就不行了

我觉得应该是下面这篇文章中描述的问题所致:

Ajax的返回值中有回车(也叫换行符)解决办法
http://www.111cn.net/wy/js-ajax/39612.htm

我按照文章中的方法,结果用alert输出时,firefox中没有换行了,但ie6还是有,而且两种浏览器都不能正常运行
 if(r[0] == "yt" ) 判断结果总是为false
但r[0]明明是yt啊,数据类型也是string,脑袋都块想破了

echo base64_encode(file_get_contents('http://localhoust/service.php?id=3'));
贴出结果

版主,结果是:
DQoNCjM4

我如果直接在浏览器中运行该链接,结果是37,但上面空了两行 ,37是$row['dig']的值

$s = 'DQoNCjM4';$s = base64_decode($s);echo bin2hex($s);
Copy after login
得到返回值的十六进制内码:0d0a0d0a3338
其中:
0d 回车符
0a 换行符

这表示你的程序在  之外有两个空行
可能在本文件也可能在嵌入的文件中

哦,是的,我包含的conn.php文件的下面有两个空行,我以前只注意上面没空行,没注意下面的空行了。删除之后一切正常了, if(r[0] == "yt" ) 为true了,

还有,4楼中讲的那种去空行的方法其实也没用。

所以你可以省略程序文件最后的 ?>,就不会有多处的空行了
用js删除空行要这样
data.replace(/[\r\n]+/g,"")

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template