Php json数据返回无效标签错误
我正在使用函数和它的属性 上载文件时,我不断收到以下错误消息:Php json数据返回无效标签错误,php,javascript,jquery,json,Php,Javascript,Jquery,Json,我正在使用函数和它的属性 上载文件时,我不断收到以下错误消息:SyntaxError:invalid label 这是我的JS脚本: jQuery('.uploadImage').live('click',function() { ajaxFileUpload(); }); (...) function ajaxFileUpload(){ jQuery.ajaxFileUpload({ url:'../wp-content/plugi
SyntaxError:invalid label
这是我的JS脚本:
jQuery('.uploadImage').live('click',function() {
ajaxFileUpload();
});
(...)
function ajaxFileUpload(){
jQuery.ajaxFileUpload({
url:'../wp-content/plugins/wp-filebrowser/uploader.php',
secureuri:false,
fileElementId:'uploadFile',
dataType: 'json',
success: function (data, status){
if(typeof(data.error) != 'undefined'){
if(data.error != ''){
alert(data.error);
}else{
alert(data.msg);
}
}
},
error: function (data, status, e){
alert(data + ' - ' + status + ' - ' + e);
}
}
)
return false;
}
我的PHP脚本可以工作(在使用json/jquery之前经过测试),但我的PHP文件的json输出肯定有问题。我试过两种方法
我正在使用格式化输出。这是我的一些PHP代码:
(...)
// Error message is at this stage empty.
move_uploaded_file($_FILES["file"]["tmp_name"], $uploadfile);
$respons = $_FILES["file"]["name"]._e(' successfully uploaded');
$data = array( "error"=> $error, "msg"=> $respons );
echo json_encode($data);
更新原来我是用WorpAddress的
\u e()
来支持多语言的。问题在于,\u e()
echo会破坏内容,从而使JSON响应变得混乱。一旦我切换到。
,它就工作了
感谢您帮助medebug解决这个问题。json标签必须用引号括起来:
"'error':" . $error . "'\n";
等等。同样,如果
$error
包含任何引号/冒号,也会“破坏”语法。基本上,您对JSON的开放程度相当于SQL注入。最好不要自己构建JSON字符串,而只是在普通PHP数组/对象上使用JSON\u encode()
。如果您以某种方式保留了两个版本的输出(error\u log()
?),则可以传递它们以查看它们有什么问题。第一种方法不会生成有效的JSON。请看一下json\u encode()
-函数的输出,该函数正确地生成了它。主要问题是键和值没有用双引号括起来
您是否尝试使用firebug来确定错误的确切来源?每个JSON键都必须是字符串。这显然不是故障线路的情况。使用
json_encode()
时,您确定输出正确吗?尝试了echo'('.json_encode($data)。')代码>?我正在使用echo json\u encode($data)
在另一个项目中,它在那里运行良好。但是,这里我得到了以下输出:成功上传[{“error”:““msg”:“\uu Untitled-1.jpg”}]
。这似乎不对……看起来无效的JSON是由使用Wordpress的\u e()
造成的。我明天会研究这个问题。使用双引号并没有什么不同。$error
和$response
都是文本字符串。我在Firebug中没有得到任何反馈。这是因为创建了动态IFrame吗?简单地添加双引号是行不通的。我强烈建议使用json\u encode()
,因为它可以为您完成一切。是的,iFrame就像独立的浏览器窗口。Firebug只在当前页面上工作。啊啊-可能是我在使用WorpAddress\u e()
进行语言支持吗?我想我在这个阶段用错了。它是回显文本,而不是将其添加到变量中。。。。我想这就是原因。我将更改$data[]=array(“error”=>$error,“msg”=>$response)
到$data=array(“error”=>$error,“msg”=>$response)
因为您不需要由[]
创建的额外数组。我已经更新了我的代码来使用它(运气不好):`$data[]=array(“error”=>$error,“msg”=>$response);echo json_编码($data)`捕获在服务器上生成的字符串,并与浏览器接收到的内容进行比较。可能在传输过程中有什么东西在摆弄它(服务器端mod_安全、客户端防病毒等)