我正在使用Ajax file upload函数及其javascript / jQuery library。
上传文件时,我不断收到此错误消息: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输出一定有问题。我尝试了两种方法。
我正在使用json_encode格式化输出。这是我的一些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);
更新
事实证明,我使用Worpdress的_e()
来支持多语言。问题是_e()
回显了内容,因此混淆了JSON响应。一旦我切换到__()
,它就有效了。
感谢您帮助我们解决这些问题。
答案 0 :(得分:2)
第一种方法不会产生有效的JSON。看看json_encode()
- 函数的输出,它正确生成它。主要问题是键和值不是用双引号括起来的。
您是否尝试使用firebug,以确定错误的确切来源?每个JSON密钥都必须是一个字符串。在您的错误路线中显然不是这种情况。
答案 1 :(得分:-1)
json标签必须用引号括起来:
"'error':" . $error . "'\n";
等等。同样,如果$error
包含任何引号/冒号,那么“也会”破坏语法。基本上你对JSON相当于SQL注入与你正在做的事情。你最好不要自己构建JSON字符串,而只是在普通的PHP数组/对象上使用json_encode()
。如果以某种方式保留两个版本的输出(error_log()
?),您可以通过http://jsonlint.com/传递它们以查看它们的错误。