我正在使用一个返回jsonp字符串的跨域api。我想将它解析为一个javascript对象,以便更容易使用。 我知道使用json字符串你可以这样做:
success: function (val) {
var result = JSON.parse(val);
}
但是,如果我使用从api获得的jsonp,我会得到“Uncaught SyntaxError:Unexpected token o”
我做错了还是这不是用jsonp做的方法?
--------编辑1 --------------------------- 如果我打开它,这就是我的jsonp字符串:
Object {resource: "boxscore", parameters: Object, resultSets: Array[22]}
parameters: Object
resource: "boxscore"
resultSets: Array[22]
0: Object
1: Object
2: Object
3: Object
4: Object
headers: Array[28]
0: "GAME_ID"
1: "TEAM_ID"
2: "TEAM_ABBREVIATION"
3: "TEAM_CITY"
4: "PLAYER_ID"
5: "PLAYER_NAME"
6: "START_POSITION"
7: "COMMENT"
length: 28
__proto__: Array[0]
name: "PlayerStats"
rowSet: Array[26]
0: Array[28]
0: "0041300201"
1: 1610612764
2: "WAS"
3: "Washington"
4: 2772
5: "Trevor Ariza"
6: "F"
7: ""
8: "37:20"
9: 7
10: 10
11: 0.7
12: 6
1: Array[28]
2: Array[28]
3: Array[28]
4: Array[28]
5: Array[28]
6: Array[28]
所以我想要做的是用每个数组中的header-info解析数据,我该怎么做? 因此,例如,如果我想要GAME_ID,我只需编写GAME_ID,并为每个数组获得游戏代码“0041300201”。
答案 0 :(得分:1)
你可以使用jsonp库..,如果跨域网站给json刺痛会很好:
go to this link it may be helpful.
http://www.jquery4u.com/function-demos/jsonp/
or you can use the code like
/* Loading JSON objects using JSONP */
(function($) {
var url = 'http://www.jquery4u.com/scripts/jquery4u.settings.json';
$.ajax({
type: 'GET',
url: url,
async: false,
contentType: "application/json",
dataType: 'jsonp'
});
})(jQuery);
答案 1 :(得分:1)
如果您要进行成功回调并且这是一个jsonp调用,则您的val
参数已经是一个javascript对象。
success: function (result) {
console.log(result);
console.log(result.someproperty);
}
如果result
是对象,这也解释了您的错误,因为JSON.parse({})
会抛出相同的错误。
SyntaxError: Unexpected token o
相当于
JSON.parse("[object Object]"); // now you see where `o` came frome
答案 2 :(得分:1)
如果您正在访问支持JSONP并且可以使用jQuery的远程API,则可以轻松跳过中间解析步骤:
// Assuming you have jQuery available:
$.ajax('http://example.com/jsonpapi?callback=?', {
dataType: 'jsonp',
success: function(data) {
// No parsing necessary.
console.log(data);
}
});
注入一个指向JSONP端点的脚本元素,端点通过在调用jQuery自动为您定义的函数中包装JSON来响应。 callback
是JSONP回调的相对标准命名约定,但请仔细检查您的API预期。
如果你没有jQuery可用或者不想使用它,你可以定义一个回调函数并自己注入一个脚本元素:
var jsonpCallback = function(data) {
console.log(data);
};
var s = document.createElement('script');
s.src = 'http://example.com/jsonpapi?callback=jsonpCallback';
document.getElementsByTagName('head')[0].appendChild(s);
这基本上就是jQuery在JSONP场景中为你做的。
答案 3 :(得分:-2)
这可能会解决您的问题:
function jsonp(data) {
alert('jsonp was called');
}
$.ajax({
url: 'http://jsfiddle.net/echo/jsonp/?callback=jsonp',
dataType: 'jsonp',
data: {
'foo': 'bar'
},
success: function(data) {
console.log(data);
}
});
实际上,JSONP根本不是JSON,它只是JavaScript代码。在这种情况下没有理由进行评估......你可以在全局定义该函数之后完成。如果必须使用jQuery来执行
,jquery还提供了使用特定jsonp回调来创建同域jsonp请求的方法// Create the function the JSON data will be passed to.
function myfunc(json) {
alert(json);
}
$.ajax({
type: "GET",
url: "http://example.com?keyword=r&callback=jsonp",
dataType: 'jsonp',
jsonpCallback: 'myfunc', // the function to call
jsonp: 'callback', // name of the var specifying the callback in the request
error: function (xhr, errorType, exception) {
var errorMessage = exception || xhr.statusText;
alert("Excep:: " + exception + "Status:: " + xhr.statusText);
}
});