首页 文章

Javascript在XMLHttpRequest.onload / Uncaught中的JSON.parse(this.responseText)上停止语法错误:意外的令牌

提问于
浏览
1

我正在尝试使用tutorial from codecourse/phpacademy进行拖放上传字段,但经过几个小时的尝试并弄清楚为什么我没有达到我的预期,我第二天就去睡觉尝试了 .

两天后,我迷路了 .

我正在尝试创建一个div,用户可以删除多个图像,这些图像会立即上传到服务器 . 服务器响应应该是一个JSON字符串,其中包含一个或多个数组,其中包含上载文件的名称和路径 . 然后,此JSON字符串用于在上载页面上显示文件的名称 .

工作原理:

  • 我可以将我的图像拖放到div上,元素会改变样式

  • 文件已上传

  • 我正从服务器返回一个JSON字符串

什么不起作用:

  • 在dropzone-div上方显示文件名

通过这看起来,停止我的javascript没有错误消息由JSON.parse接收其内容的行 . EDIT :我收到错误,感谢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",没有令牌显示......

我的代码有问题吗?如果是这样,有什么可能的解决方案?如果没有,我可以使用什么来获得我想要的相同结果?


TL; DR:

Javascript在 JSON.parse(this.responseText) 停止 XMLHttpRequest.onload
typeof this.responseText是字符串 .
它们都位于同一个域中 .
错误:"Unexpected token",没有令牌显示......


Edit 关于Uncaught SyntaxError: Unexpected token with JSON.parse的重复

我已经阅读了给出的答案,但它仍然没有用 .

  • JSON.parse() 只能接受一个字符串 .

=typeof this.responseText 是字符串 .

JSON.stringify(this.response);

也不起作用 .

  • 新行字符,制表符和反斜杠使其无效 .
    =我've run my JSON string trough a validator and it was valid JSON. But to be sure, I'已删除所有反斜杠 . 实际上,我已经注释掉了一些PHP .
if (move_uploaded_file($_FILES["files"]["tmp_name"][$position], $target_file)) {
    $uploaded[] = array(
        'name' => time().".".$imageFileType//,
        //'file' => $target_file
    );
}

回归: [{"name":"1452529278.jpg"}]

但它仍然包含一个意外的令牌 .

1 回答

  • 0

    感谢@apsillers,我找到了答案 . 我把我的url_to_upload_images.php保存为UTF 8,用bom . 这会在返回JSON时创建一个不可见的字符 .

    保存文件为UTF 8没有BOM,它的工作原理!

相关问题