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));
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返回的值无法被前端识别的主要内容,如果未能解决你的问题,请参考以下文章