JSON编码将换行添加为第一个字符

时间:2015-10-13 06:26:52

标签: php jquery json

这个php:

$token = NoCSRF::generate( 'csrf_token' );
$status = "succeed";
$message = "Update done!";
$return = array($status,$message,$token);
//header('Content-type: application/json');
echo json_encode($return);

返回

"↵["succeed","Update done!","MTQ0NDcxNzM3Nm9nUTRCVzRKOXc5RXFocUZodXh5eXo4Tm5waTlzZ05a"]"

到js无法处理的浏览器。

如果我取消注释php中的标题行,则返回

["succeed", "Update done!", "MTQ0NDcxNzIyNnAwY01LMVZHdXV6TE1ZT3FZZHhpd2JZcnM0RTl0Rm81"]

并且运作正常

知道这里发生了什么吗?我不能只删除标题行,因为这个解决方案在现场托管网站上不起作用,尽管它上面的我的开发网站也是如此...

2 个答案:

答案 0 :(得分:0)

这与默认情况下,json是通过text/html发送的事实有关。使用Content-type: application/json时,浏览器接受可以在javascript中操作的JSON编码数据。

question中提供了更多信息。

答案 1 :(得分:0)

@ Josh在this thread中的beforeSend代码已经为我排序了这个:

var jsonMimeType = "application/json;charset=UTF-8";
$.ajax({
 type: "GET",
 url: myURL,
 beforeSend: function(x) {
  if(x && x.overrideMimeType) {
   x.overrideMimeType(jsonMimeType);
  }
 },
 dataType: "json",
 success: function(data){
  // do stuff...
 }
});