2012-04-25 148 views
4

我使用Plupload上傳文件,它工作正常。無法從Plupload獲取JSON數據

我測試了在Stackoverflow上找到的各種建議,但是我仍然無法從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

回答

2

有許多事情錯

  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

3

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); 
});