json数据返回无效标签错误

时间:2010-09-08 23:26:23

标签: php javascript jquery json

我正在使用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响应。一旦我切换到__(),它就有效了。

感谢您帮助我们解决这些问题。

2 个答案:

答案 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/传递它们以查看它们的错误。