我在函数中有以下代码来读取JSON文件:
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
myObj = this.responseText;
console.log(myObj);
JSON.parse(myObj); // error is here
}
};
xmlhttp.open("GET", "music-data.json", true);
xmlhttp.send();
JSON数据来自与我的html / css / js文件相同的文件夹,其结构如下:
window.MUSIC_DATA = {
"list1": [
{
data here...
},
],
"list2": [
{ data here...
...
}
我无法解析我的对象并从list1和list2中提取我需要的内容并使用现有代码获取错误:
Uncaught SyntaxError: Unexpected token w in JSON at position 0
at JSON.parse (<anonymous>)
at XMLHttpRequest.xmlhttp.onreadystatechange
答案 0 :(得分:2)
问题在于
function get_data($url)
{
$ch = curl_init();
$timeout = 5;
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$url="someurl";
$data = json_decode(get_data($url), true);
foreach($data as $val)
{
echo $val->Name_Hi;
}
那不是JSON,它是JavaScript。从文件中删除它,以便只剩下值,它可能会工作(或文件可能有其他问题)。
答案 1 :(得分:1)
正如其他人所说,您需要将服务器端文件修复为有效的JSON。如果您无法控制此文件的内容并希望避免使用字符串操作例程,那么您可以使用另一种方法:
var s = document.createElement('script');
s.src = 'music-data.json';
s.async = true;
s.onreadystatechange = s.onload = function() {
if (!s.readyState || /loaded|complete/.test(s.readyState)) {
var myObj = window['MUSIC_DATA'];
console.log(myObj);
alert(myObj.list1);
alert(myObj.list2);
...
}
};
document.querySelector('head').appendChild(s);
答案 2 :(得分:0)
改变这个:
window.MUSIC_DATA = {
"list1": [
{
data here...
},
],
"list2": [
{ data here...
...
}
到此:
{
"list1": [
{
data here...
},
],
"list2": [
{ data here...
...
}