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