我正在尝试使用tutorial from codecourse/phpacademy拖放上载字段,但是经过数小时的尝试并弄清楚为什么我没有达到我的期望,我第二天去睡觉了。
过了两天,我迷路了。
我正在尝试创建一个div,用户可以在其中放置多个图像,这些图像会立即上传到服务器。服务器响应应为JSON字符串,其中包含一个或多个数组,该数组具有名称和上载文件的路径。然后,此JSON字符串用于在上传页面上显示文件名。
工作原理:
我可以将图片拖放到div上,元素会更改样式
文件已上传
我收到来自服务器的JSON字符串
什么不起作用:
在dropzone-div上方显示文件名
从外观上看,通过JSON.parse接收其内容的行停止了我的JavaScript,而没有错误消息。
编辑:我收到一个错误,由于arve0,“意外的令牌”,但没有令牌显示。
var upload = function(files) {
var formData = new FormData(),
xhr = new XMLHttpRequest(),
x;
for(x = 0; x < files.length; x = x + 1) {
formData.append('files[]', files[x]);
}
try {
console.log("DING!1");
console.log(this.responseText);
var data = JSON.parse(this.responseText);
console.log("DING!2");
displayUploads(data);
console.log("DING!3");
} catch(e) {
alert(e); //error in the above string(in this case,yes)!
}
xhr.open('post', 'url_to_upload_images.php?uniqueParamVal=' + new Date().getTime(), true);
xhr.send(formData);
};
控制台显示:
DING!1
[{"name":"1452525771.jpg","file":"..\/folder_with_images\/1452525771.jpg"}]
this.responseText的类型是字符串。
它们都位于同一域中。
错误:“意外令牌”,没有令牌显示...
我的代码有问题吗?如果是这样,有什么可能的解决方案?
如果没有,我该如何使用以获得想要的结果?
TL; DR:
JavaScript在
JSON.parse(this.responseText)
中的XMLHttpRequest.onload
处停止this.responseText的类型是字符串。
它们都位于同一域中。
错误:“意外令牌”,没有令牌显示...
编辑有关Uncaught SyntaxError: Unexpected token with JSON.parse重复项的信息
我已经阅读了给出的答案,但是仍然无法正常工作。
-
JSON.parse()
只能接受字符串。=typeof this.responseText
是字符串。JSON.stringify(this.response);
也不起作用。
-新行字符,制表符和反斜杠使其无效。
=我通过验证程序运行了JSON字符串,它是有效的JSON。但是可以肯定的是,我已经删除了所有反斜杠。实际上,我已经注释掉了一些PHP。
if (move_uploaded_file($_FILES["files"]["tmp_name"][$position], $target_file)) {
$uploaded[] = array(
'name' => time().".".$imageFileType//,
//'file' => $target_file
);
}
返回:
[{"name":"1452529278.jpg"}]
但它仍然包含意外令牌。
最佳答案
感谢@apsillers,我找到了答案。我已经用bom将url_to_upload_images.php保存为UTF 8。这将通过返回JSON创建不可见的字符。
将其保存为不带BOM的UTF 8文件,它可以正常工作!
关于javascript - Javascript在XMLHttpRequest.onload/Uncaught SyntaxError中的JSON.parse(this.responseText)上停止语法错误:意外的 token ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34725972/