Javascript stops on JSON.parse(this.responseText) in XMLHttpRequest.onload/Uncaught SyntaxError: Unexpected token
Javascript stops on JSON.parse(this.responseText) in XMLHttpRequest.onload/Uncaught SyntaxError: Unexpected token
我正在尝试使用 tutorial from codecourse/phpacademy 创建一个拖放上传字段,但经过几个小时的尝试并弄清楚为什么我没有得到我期望的结果,我去睡觉尝试了第二天。
两天过去了,我迷路了
我正在尝试创建一个 div,用户可以在其中放置多个图像,这些图像会立即上传到服务器。服务器响应应该是一个 JSON 字符串,其中包含一个或多个数组以及上传文件的名称和路径。此 JSON 字符串随后用于在上传页面上显示文件名。
什么是有效的:
- 我可以将图像拖放到 div 上,元素会更改样式
- 文件已上传
- 我从服务器收到一个 JSON 字符串
什么不起作用:
- 在拖放区上方显示文件名-div
从表面上看,JSON.parse 接收其内容的那一行停止了我的 javascript 并且没有错误消息。
编辑:由于 arve0、"Unexpected token",我收到一个错误,但没有显示任何标记。
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"}]
typeof this.responseText 是字符串。
它们都位于同一个域中。
错误:"Unexpected token",没有显示令牌...
我的代码有问题吗?如果是这样,可能的解决方案是什么?
如果没有,我可以使用什么来获得我想要的相同结果?
长话短说:
Javascript 在 XMLHttpRequest.onload
停在 JSON.parse(this.responseText)
typeof this.responseText 是字符串。
它们都位于同一个域中。
错误:"Unexpected token",没有显示令牌...
编辑 关于 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,我找到了答案。我已将我的 url_to_upload_images.php 保存为 UTF 8,带有 bom.这将使用 JSON.
的 return 创建一个不可见的字符
将文件保存为不带 BOM 的 UTF 8 文件,并且有效!
我正在尝试使用 tutorial from codecourse/phpacademy 创建一个拖放上传字段,但经过几个小时的尝试并弄清楚为什么我没有得到我期望的结果,我去睡觉尝试了第二天。
两天过去了,我迷路了
我正在尝试创建一个 div,用户可以在其中放置多个图像,这些图像会立即上传到服务器。服务器响应应该是一个 JSON 字符串,其中包含一个或多个数组以及上传文件的名称和路径。此 JSON 字符串随后用于在上传页面上显示文件名。
什么是有效的:
- 我可以将图像拖放到 div 上,元素会更改样式
- 文件已上传
- 我从服务器收到一个 JSON 字符串
什么不起作用:
- 在拖放区上方显示文件名-div
从表面上看,JSON.parse 接收其内容的那一行停止了我的 javascript 并且没有错误消息。 编辑:由于 arve0、"Unexpected token",我收到一个错误,但没有显示任何标记。
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"}]
typeof this.responseText 是字符串。
它们都位于同一个域中。
错误:"Unexpected token",没有显示令牌...
我的代码有问题吗?如果是这样,可能的解决方案是什么? 如果没有,我可以使用什么来获得我想要的相同结果?
长话短说:
Javascript 在 XMLHttpRequest.onload
停在 JSON.parse(this.responseText)
typeof this.responseText 是字符串。
它们都位于同一个域中。
错误:"Unexpected token",没有显示令牌...
编辑 关于 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,我找到了答案。我已将我的 url_to_upload_images.php 保存为 UTF 8,带有 bom.这将使用 JSON.
的 return 创建一个不可见的字符将文件保存为不带 BOM 的 UTF 8 文件,并且有效!