Javascript 是什么导致了“;未捕获的语法错误:意外标记o”;使用$.parseJSON()和JSON.parse()进行
我已经看过了SO和谷歌,但没有发现有什么帮助,我不确定如何继续。我使用Javascript 是什么导致了“;未捕获的语法错误:意外标记o”;使用$.parseJSON()和JSON.parse()进行,javascript,angularjs,Javascript,Angularjs,我已经看过了SO和谷歌,但没有发现有什么帮助,我不确定如何继续。我使用echo json\u encode()从php页面返回一个数组,如下所示: [" "," "," "," "," ",1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31] <?php header("Content-Type: text/json"); echo json_encode(array("s
echo json\u encode()
从php页面返回一个数组,如下所示:
[" "," "," "," "," ",1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]
<?php
header("Content-Type: text/json");
echo json_encode(array("someKey" => "someValue"));
但是,当我尝试使用JSON.parse()时,Object.parse(native)上总是出现意外的标记o,而当我使用JQuery变量时,Function.parse(native)
上总是出现意外的标记o
但是,当我将其附加到$scope
时,我可以在页面上使用打印出来,那么我做错了什么,我如何纠正这一点
这是我的控制器
function myController($scope, memberFactory) {
response = memberFactory.getMonth("2013-08-01 06:30:00");
//$scope.response = response;
var monthDays = $.parseJSON(response);
var dates = [];
for (var i = 0; i < monthDays.length; i++) {
if (i % 7 == 0) dates.push([]);
dates[dates.length - 1].push(monthDays[i]);
}
$scope.dates = dates;
//
}
这是我的php:
<?php $daysOfMonth=[ " ", " ", " ", " ", " ",1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31];
echo json_encode($daysOfMonth); ?>
现在我得到console.log的1
(“数据”+data[0])代码>如预期,但我得到console.log(月)
对于console.log(month.promise)
我获取[object object]
,对于console.log(month.promise[0])代码>我得到的未定义的响应已被解析,您无需再次解析它
如果您再次解析它,它将首先执行toString转换,因此您正在解析它
"[object Object]"
这解释了意外标记o
请查看转换模块请求和响应的章节
如果检测到JSON响应,则使用JSON解析器对其进行反序列化
由于它已经被解析为JSON对象,如果您再次解析它,您将得到该错误
下面是一个简单的测试:
response = '{"a": "a","b": "b"}';
var obj = $.parseJSON(response);
console.log(obj); //Object {a: "a", b: "b"}
$.parseJSON(obj) //Uncaught SyntaxError: Unexpected token o
在@CuongLe的帮助下,通过替换
response = memberFactory.getMonth("2013-08-01 06:30:00");
var monthDays = $.parseJSON(response);
与:
response=memberFactory.getMonth(“2013-08-01 06:30:00”);
回答,然后(
功能(月日){
log(“monthDays:+monthDays+”!!!);
var日期=[];
对于(变量i=0;i
如果发送了标题:
Content-Type: text/json
然后不需要调用parseJSON()
。例如:
在PHP中,我会设置如下标题:
[" "," "," "," "," ",1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]
<?php
header("Content-Type: text/json");
echo json_encode(array("someKey" => "someValue"));
你在调试器中看到了什么?@Slak我刚刚看到[object object]可能有不可见的字符,比如BOM。。也不要在数组中混合类型。@Esailija没有不可见的字符,混合类型不是问题,因为我只尝试了数字和字符串,得到了相同的问题。关于混合类型的建议与您当前的问题无关,但只是一个一般性建议。因此如何访问值,我尝试使用响应[0],但运气不佳,我尝试了Object.keys(response)
获取密钥,它返回then
,response[“then”]不返回任何内容console.log(response)代码>以查看它的外观<代码>响应[0]
如果您要返回该数组,应该可以工作。对于控制台.log(response)
我得到[object object]
,对于控制台.log(response[0])
我得不到定义,如果我像这样附加到作用域$scope.response=response
那么{response}
显示为[,,,,,,,,,,,,,,,,,,,”,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]
看起来根本不对。。你能确认你没有第二次隐藏解析吗?没有第二次解析,我已经全部删除了
<?php
header("Content-Type: text/json");
echo json_encode(array("someKey" => "someValue"));
success: function(response) {
// This will output "someValue" to the console.
// Note the lack of the parseJSON() call. parseJSON() is called for us because the header was sent as text/json
console.log(response.someKey);
}