我正在尝试使用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/

10-12 07:26
查看更多