2016-02-28 84 views
0

我使用的是播放/斯卡拉的Web應用程序和API階,目前在本地主機上的兩個不同端口上運行簡單:9000和本地主機:8080分別。我有fine-uploader.com網站文檔中的基本頁面,以及Play中構建的簡單測試頁面。 (FWIW,我不認爲上述是相關的)FineUploader未能解析傳入的JSON

當我發佈文件,分塊與否,Fine上傳從API和有效的JSON接收200,但JSON.parse返回一個失敗。精細上傳器的日誌記錄如下。如果我拿這個輸出並運行它(在控制檯中)

JSON.parse(JSON.stringify(json)) 

返回一個有效的對象。我不能只JSON.parse(json)直接在瀏覽器工具,B/C已建好的對象。我通過console.log'ing typeOf json在qq.parseJson方法檢查了類型,它返回string,所以不需要轉換,儘管我已經嘗試過使用相同的結果。

細載控制檯日誌:

[Fine Uploader 5.5.1] Sending simple upload request for 0 fine-uploader.js:251 
[Fine Uploader 5.5.1] xhr - server response received for 0 fine-uploader.js:251 
[Fine Uploader 5.5.1] responseText = {"code":"UPLOAD_COMPLETE","response":{"MediaModel":{"id":1103,"publicUri":"http://localhost:8080/media/Archive.zip","fileLocation":"/src/services/api/src/main/webapp/media/Archive.zip","mediaDate":{"year":2016,"month":2,"day":28},"mediaOrder":1,"viewName":"","caption":"","altText":"","isPublic":1,"fileSize":1107080,"created":"2016-02-28T14:58:43Z"},"UserMediaModel":{"id":1,"userId":24,"mediaId":3,"created":"2016-02-17T12:48:18Z"}},"errors":[]} fine-uploader.js:251 
[Fine Uploader 5.5.1] Received response status 200 with body: {"code":"UPLOAD_COMPLETE","response":{"MediaModel":{"id":1103,"publicUri":"http://localhost:8080/media/Archive.zip","fileLocation":"/src/services/api/src/main/webapp/media/Archive.zip","mediaDate":{"year":2016,"month":2,"day":28},"mediaOrder":1,"viewName":"","caption":"","altText":"","isPublic":1,"fileSize":1107080,"created":"2016-02-28T14:58:43Z"},"UserMediaModel":{"id":1,"userId":24,"mediaId":3,"created":"2016-02-17T12:48:18Z"}},"errors":[]} fine-uploader.js:251 
[Fine Uploader 5.5.1] Simple upload request failed for 0 

服務器用200%的API響應日誌和我可以看到在Chrome開發工具響應選項卡的準確響應對象。

我添加了一個自定義錯誤處理程序,但沒有更多的詳細信息被提供,只是錯誤是文本輸出

Error on file number 0 - Archive.zip. Reason: {"code":"UPLOAD_COMPLETE",....same as above 

最後,所有行屬性格式插入到數據庫中,你從ID來看看上面創建。所有的日誌都指向同樣成功的行動。

感謝您的指點。我也把這個輸出放在http://jsonlint.com/,它解析得很好。

謝謝! (對不起,缺乏JSON格式的,我可以改變它,但是這似乎夠長的話)

編輯 看來,我已經滿足了其他問題與"success":trueContent-Type=text/plain規定的要求。以下每個請求是JSON輸出和標頭

Headers: 
Key: Access-Control-Allow-Origin Value: http://localhost:9000 
Key: Date Value: Mon, 29 Feb 2016 00:55:19 GMT 
Key: Access-Control-Allow-Credentials Value: true 
Key: Content-Type Value: text/plain; charset=UTF-8 

{ 
"code": "UPLOAD_COMPLETE", 
"response": { 
    "MediaModel": { 
     "id": 1169, 
     "publicUri": "http://localhost:8080/media/Archive.zip", 
     "fileLocation": "/src/services/api/src/main/webapp/media/Archive.zip", 
     "mediaDate": { 
      "year": 2016, 
      "month": 2, 
      "day": 28 
     }, 
     "mediaOrder": 1, 
     "viewName": "", 
     "caption": "", 
     "altText": "", 
     "isPublic": 1, 
     "fileSize": 1107080, 
     "created": "2016-02-29T00:55:19Z" 
    }, 
    "UserMediaModel": { 
     "id": 1, 
     "userId": 24, 
     "mediaId": 3, 
     "created": "2016-02-17T12:48:18Z" 
    } 
}, 
"errors": [], 
"success": true 
} 

我確信這最終會變成愚蠢的東西,所以我很欣賞輸入。

+0

可能的複製[我的文件被上傳與我fineuploader設置,但尚未就說明上傳失敗。 ,這是什麼原因呢?(http://stackoverflow.com/questions/34990081/my-file-gets-uploaded-with-my-fineuploader-setup-but-yet-it-shows-upload-failed) –

+0

謝謝@RayNicholus - 我注意到在之後的文檔中嘗試過,但沒有成功。我再次嘗試用/不用chunking。並確保'Content-Type =「text/plain」'爲了保持簡短,一個新的結果粘貼。 http://pastebin.com/knh4VMG4 – ekydfejj

+0

請在問題中粘貼服務器的確切響應。 –

回答

0

基於通過精細上傳報告的錯誤,你的反應是格式不正確。如果仔細查看瀏覽器網絡選項卡中的響應(例如使用Chrome開發工具),則可能會看到一個JSON字符串,該字符串一旦使用JSON.parse結果解析爲另一個JSON字符串,而不是包含期望屬性的JavaScript對象。我無法確認這一點,因爲您尚未發佈服務器的確切響應,但我確定情況正是如此。這很可能是由服務器端的編碼問題引起的。例如,您的服務器應該返回此:{"foo": "bar", "success": true},而不是這個:"{\"foo\": \"bar\", \"success\": true}"。我懷疑你的服務器正在返回後者。的

+0

謝謝,我會繼續挖掘,但是我發佈的內容直接來自Chrome開發人員工具,然後在發送和漂亮打印之前通過JSONLint進行驗證。 – ekydfejj

+0

您需要查看開發工具的網絡部分中的響應選項卡。這會讓你瞭解你的服務器如何不能正確地編碼響應。 –

+0

我很感謝你的關注,我不得不轉移到其他事情上,只要這成爲我的首要任務,我就會回來。但FWIW,所有帖子都來自chrome開發工具的網絡標籤。我記錄了大量的數據,但是當涉及調試這樣的問題時,我堅持使用瀏覽器所看到的內容。我發佈的第一套包括罰款上傳的簽名,沒有成功批准......這是我的不好。我會很快更新這個問題。再次感謝您的關注。 – ekydfejj