PHP中json_encode返回的值无法被前端识别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP中json_encode返回的值无法被前端识别相关的知识,希望对你有一定的参考价值。

echo json_encode(array("msg"=>"ok"));
前端也有得到,但是前端ajax就是跳到error,error提示200 4 parsererror
前端:
jQuery.ajax(
url: "php/register.php",
type: "post",
timeout: 2000,
data: "username": username,"model": 1,
dataType: "json",
beforeSend: function()
,
success: function(date)
alert(date.msg);
,
error: function(XMLHttpRequest, textStatus, errorThrown)
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
,
complete: function(XMLHttpRequest, textStatus)
this; // 调用本次AJAX请求时传递的options参数

);
后端:
echo json_encode(array('msg'=>'ok','type'=>'email','regcode'=>$regcode));

参考技术A 你可以尝试两个办法:
1- 前端把dataType: 'json'改成 dataType: 'jsonp'
2- 后端在 echo 前使用命令 header('Content-type:text/json') 可能还额外需要 header('char-set:utf-8');追问

header('Content-type:text/json;charset=utf-8');
echo json_encode(array('msg'=>'ok','type'=>'email','regcode'=>$regcode));这个试过,没效果;
data: "username": username,"model": 1,
dataType: "jsonp",
也没有效果

追答

你可以贴出完整的后端代码吗?$regcode的值是什么?
哦...写错了
header('Content-type: application/json');
如果写text/json的话直接访问这个页面都打不开了,呵呵。试试吧

追问

谢谢大神,估计前台页面和php不在同级目录下也算跨域,得用jsonp,php用jozh_china 的方法将$callback加进去返回就得到页面能认识的json格式了,跳入succes里面了,也不用parserJSON来解析

参考技术B ajax访问是否跨域,试试jsonp追问

不是同一个目录下面可以叫“跨域”吗

参考技术C 返回值数据类型不对,jquery那里要求比较严谨。追问

我也在怀疑 json_encode这里的问题,但是到处都写了json_encode 就是json的封装,而且我在浏览器可以看到

追答

也许你可以试试jsonp方式,返回数据将是字符串。
后端:
$callbackname = $_POST['callback'];
echo $callbackname."(".json_encode(array('msg'=>'ok','type'=>'email','regcode'=>$regcode)).")";

看有没有效果。

补充:
有些时候ajax返回的数据是字符串格式而不是json格式,那我们需要判断其数据类型,如果是字符串,则parseJSON()处理一下。

追问

$callbackname 是什么?

追答

回调参数,dataType:jsonp的话请求url上会自动添加这个参数。应该是$_GET['callback'],具体看一下你的请求。

本回答被提问者采纳
参考技术D 贴代码上来啊 第5个回答  2015-07-06 你的complete 里面的 this 是做什么的?追问

这个 没什么样,删了,对问题没影响

追答


function ccc()
$.ajax(
url: "php/register.php",
type: "post",
timeout: 15000,
data: 'username': 'admin','model': 1,
dataType: "json",
success: function(d)
alert(d.msg);
,
error: function(xhr, s, error)
alert(xhr.status);
alert(xhr.readyState);
alert(s);
,
complete: function(xhr,s)
this; // 调用本次AJAX请求时传递的options参数

);


click

你看我的例子,怎么样,可以运行没
你上面的那个错误提示,表示你后台PHP代码里,少 括号 或者 少标点符号吧

对数组内容使用了json_encode返回汉字内容返回了空值

如果使用json_encode对数组进行转成JSON字符串时候,发现汉字的全部为空,这样可以说明的一点是你的页面上用的一定不是UTF8编码,在PHP手册中对json_encode中待编码的值已经说明所有字符串的编码必须是UTF-8;

所以如果你的页面不是UTF-8编码的话,就需要将你的数组内容转码,具体怎么转码?下面例如你的页面是使用GBK编码的:

function Gbk2Utf8($data){
	if(is_array($data)){
		foreach($data as $key => $value){
			$data[$key]=call_user_func(__FUNCTION__,$value);
		}
		return $data;
	}
	return iconv("gbk","utf-8",$data);
}

 

以上是关于PHP中json_encode返回的值无法被前端识别的主要内容,如果未能解决你的问题,请参考以下文章

json_encode 返回“ [重复]

PHP“漂亮打印”json_encode [重复]

2019-11-13 PHP7.x json_encode() Float Issue

PHP接收JSON格式的数据

PHP json_encode 到 C# 对象无法转换

php接收json格式数据(text/xml)