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 字符串随后用于在上传页面上显示文件名。

什么是有效的:

什么不起作用:

从表面上看,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 文件,并且有效!