Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过JSON传输的URL的正确JS解析_Javascript_Php_Ajax_Json - Fatal编程技术网

Javascript 通过JSON传输的URL的正确JS解析

Javascript 通过JSON传输的URL的正确JS解析,javascript,php,ajax,json,Javascript,Php,Ajax,Json,以下是我的ajax上下文的简化PHP端: // in a for loop $text = "/home/ubuntu/CANE-HDD-100/y.txt" // $text_encoded = urlencode($text); // $text_encoded = preg_replace("/(\-)/", "%2D", $text_encoded); $text_encoded = "%2Fhome%2Fubuntu%2FCANE%2DHDD%2D100

以下是我的ajax上下文的简化PHP端:

// in a for loop
    $text = "/home/ubuntu/CANE-HDD-100/y.txt"
    // $text_encoded = urlencode($text);
    // $text_encoded = preg_replace("/(\-)/", "%2D", $text_encoded);
    $text_encoded = "%2Fhome%2Fubuntu%2FCANE%2DHDD%2D100%2Fy.txt"
    $structure[$i] = $text_encoded;

echo json_encode($structure);
以下是JS方面:

request.onload = function()
{
    var cleanedText = JSON.parse(this.responseText);
    alert(cleanedText);
};
这将引发以下错误:

SyntaxError:JSON.parse:JSON数据的第1行第1列出现意外字符

如果我将
JSON.parse(this.responseText)
替换为
decodeURI(this.responseText)
,我得到的
cleanedText
等于

/home/ubuntu/CANE-HDD-100/y.txt [%2Fhome%2funtubuntu%2FCANE-HDD-100%2Fy.txt”]

我不喜欢它,因为
cleanedText
上的
for
形下转换循环会(正确地)将该变量的每个元素视为一个字符,而我显然希望将元素作为整个URL


一个可能的、肮脏的解决方法是在
cleanedText
上设置一些正则表达式来恢复每个URL,但我想知道是否有更干净的方法。

w3re的评论必须是正确的。您必须有格式不正确的JSON。我们可以通过从
decodeURI
获取输出,通过
encodeURI
运行它,从PHP获取必须是原始字符串的内容,然后尝试对其进行
JSON.parse
,来说明这一点。我们得到一个错误:

JSON.parse(encodeURI('/home/ubuntu/CANE-HDD-100/y.txt ["%2Fhome%2Fubuntu%2FCANE-HDD-100%2Fy.txt"]'))
(program):1 Uncaught SyntaxError: Unexpected token /
该错误来自Chrome,但是
:1
显示“第1行”,而
/
位于第1列,因此我认为这就是您看到的错误

基本上,这个字符串不是有效的JSON,因为开头的所有内容都并没有用引号括起来

但是,例如,如果您将其全部放在引号中并转义现有的引号,则这将起作用:

JSON.parse('"/home/ubuntu/CANE-HDD-100/y.txt \\"%2Fhome%2Fubuntu%2FCANE-HDD-100%2Fy.txt\\""')
或使用数组:

JSON.parse('["/home/ubuntu/CANE-HDD-100/y.txt", "%2Fhome%2Fubuntu%2FCANE-HDD-100%2Fy.txt"]')
或对象:

JSON.parse('{"/home/ubuntu/CANE-HDD-100/y.txt": "%2Fhome%2Fubuntu%2FCANE-HDD-100%2Fy.txt"}')

因此,在JSON编码和解码中,您的PHP或JavaScript一定出了问题。为了进一步提供帮助,我需要更多地查看您的代码。

如果您可以发布PHP文件中的JSON输出,这会很有帮助,但我的第一个猜测是,还有其他一些字符输出。