无法从Plupload获取JSON数据

无法从Plupload获取JSON数据

问题描述:

我使用Plupload上传文件,它工作正常。无法从Plupload获取JSON数据

我测试了在*上找到的各种建议,但是我仍然无法从JSON响应中获取任何合理的数据。

在我upload.php文件我有echo json_encode($result);

在我的JS我做了以下内容:

uploader.bind('FileUploaded', function(up, file, response) { 
    var obj = jQuery.parseJSON(response); 
    var obj2 = eval(response); 

    alert(response.toSource()); // <-- Outputs raw data 
    alert(obj); // <-- is NULL 
    alert(obj2.toSource()); // <-- Outputs eval data format 
    alert(obj2.logo_url); // <-- Is not working 
    }); 

alert(response.toSource());返回此:

({response:"{ 
    \"logo_url\":\"http:\\/\\/mysite.com\\/uploads\\/3b\\/7b019482c806f9_logo.jpeg\", 
    \"img_id\":\"30\", 
    \"feedback\":{\"message\":\"File uploaded\", 
    \"success\":true}}", 
    status:200}) 

obj为空。

我在这里做错了什么?

+0

首先在安装Firebug之类的东西之前,使用console.log作为alert不能处理复杂的类型我想 - console.log会显示所有对象的内容 – 2012-04-25 10:01:19

+0

我已经是Firebug的常用用户。做一个console.log或警报将显示相同的结果 – Steven 2012-04-25 10:07:45

+0

它不会实际上,警报将显示“[对象对象]”,如果它不为空,至少在Firefox中不会告诉你很多。我只是在该响应字符串上调用了parseJSON,并且它工作正常,因此在对象上调用它并不会为你工作,这很奇怪 – 2012-04-25 10:26:05

有许多事情错

  1. 删除该帖逃逸\”
  2. 响应+的状态应该是在引号

{ 
    "response": { 
     "logo_url": "http: \\/\\/mysite.com\\/uploads\\/3b\\/7b019482c806f9_logo.jpeg", 
     "img_id": "30", 
     "feedback": { 
      "message": "Fileuploaded", 
      "success": true 
     } 
    }, 
    "status": 200 
} 
+0

我该如何删除它?它由'json_encode($ result)'生成。出于某种原因,还会添加“状态”。我没有在我的web服务文件中使用'json_encode()'返回所有数据的问题' – Steven 2012-04-25 10:59:43

+0

您使用的是哪个版本的PHP?如果它小于5.4.0,那么你需要注意魔术引号(magic.quotes_gpc在php.ini中)。这将是最好的解决它在PHP中,但你可以在解析它之前在JavaScript中编辑json字符串,但这是混乱的方式。确保你使用的任何lib没有自己的json_encode而不是php一个(它的一个新的func和相当多的libs自己写的可能更糟的) – 2012-04-25 11:11:03

+2

我找到了答案。 JSON是有效的。我试图做'$ .parseJSON(response)',但corect的方式是'$ .parseJSON(response.response)'。那就是诀窍。 – Steven 2012-04-25 12:41:36

VAR上传= $(“#multi_upload”)。pluploadQueue();

uploader.bind('FileUploaded', function (up, file, res) { 
    var res1 = res.response.replace('"{', '{').replace('}"', '}'); 
    var objResponse = JSON.parse(res1); 
    alert(objResponse.fn); 
});