FineUploader无法解析传入的JSON

时间:2016-02-28 15:41:25

标签: json scala fine-uploader

我正在使用play / scala作为webapp和scala API,目前仅在localhost上的两个不同端口上运行:9000和localhost:8080。我有来自fine-uploader.com网站文档的基本页面,以及在Play中构建的简单测试页面。 (FWIW,我认为上述内容并不重要)

当我发布文件时,chunked与否,Fine uploader从API接收200并且有效JSON,但JSON.parse返回失败。精细上传器的日志记录如下。如果我接受此输出并通过(在控制台中)

JSON.parse(JSON.stringify(json)) 

返回有效对象。我不能只是JSON.parse(json)直接在浏览器工具b / c它已经是一个对象。我已经通过qq.parseJson方法中的console.log'ing typeOf json检查了类型,并返回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

服务器响应每个API日志200,我可以在Chrome Dev工具的Response选项卡中看到确切的响应对象。

我添加了一个自定义错误处理程序,但没有提供更多信息,只是错误是文本输出

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
}

我确信这最终会变得愚蠢,所以我很欣赏这些意见。

1 个答案:

答案 0 :(得分:0)

根据Fine Uploader报告的错误,您的响应格式不正确。如果仔细查看浏览器网络选项卡中的响应(例如使用Chrome开发工具),您可能会看到一个JSON字符串,一旦使用<?php include('functie.php'); include('upload.php'); ?> 解析后会产生另一个JSON字符串而不是包含JavaScript对象预期的属性。我无法确认这一点,因为您没有从服务器发布确切的响应,但我确信是这种情况。这很可能是由服务器端的编码问题引起的。例如,您的服务器应该返回:JSON.parse而不是:{"foo": "bar", "success": true}。我怀疑你的服务器正在返回后者。