如何使用 jsonp 回调包装 json 文件
How to wrap a json file with jsonp callback
我正在尝试解析 Json 文件响应,但我遇到了麻烦。
我的javascript是:
var url=encodeURIComponent("http://localhost:8080/repositories/rep_name?query=some_query&Accept=application/sparql-results+json");
$.ajax({
url: url,
type:'GET',
dataType: 'jsonp',
success: function(data, textStatus, xhr) {
// do something
$('#doQuery').html("QUERY");
},
error: function(xhr, textStatus, errorThrown) {
_UTILS.showModal("error", textStatus, 300, 100);
}
});
但是我在 chrome 中遇到了这个错误 "Uncaught SyntaxError: Unexpected token :"。我认为问题是我的服务器给我的响应没有用 jsonp 回调包装,因为当我检查我的响应时,它显示为普通的 json 格式,如下所示:
{
"head" : {
"vars" : [ "child", "parent", "count" ]
}
}
而不是这个:
callback({
"head" : {
"vars" : [ "child", "parent", "count" ]
}
})
但是当我检查来自 ajax 的请求 url 时,它实际上在 url 的末尾附加了“&callback=”参数,如下所示:
http://localhost:8080/repositories/rep_name?query=some_query&Accept=application/sparql-results+json&callback=jQuery21105273823537863791_1443406558624&_=1443406558625
那么为什么它仍然给我那个错误?
需要注意的是,服务器发回了一个.srj文件,但是是json格式的,不知道是不是跟报错有关系。另外,我不能使用 `dataType: 'json',否则我会得到 "XMLHttpRequest cannot load. No 'Access-Control-Allow-Origin' header is present on the requested resource." 错误。不过我不认为我可以更改服务器。
JSONP 回调参数是对服务器的提示,表明您希望 JSON 包含在回调中。如果服务器未专门设置为监听参数并在需要时提供 JSONP,则它将忽略该参数。
由于服务器上没有 Access-Control-Allow-Origin
header,使用纯 JSON 而不是 JSONP 也是 no-go。
我会仔细检查以确保没有其他方法可以从服务器请求 JSONP,否则如果您无权访问服务器上的代码,您可以'不要通过其他方式请求 JSONP,很遗憾,你运气不好。
我正在尝试解析 Json 文件响应,但我遇到了麻烦。
我的javascript是:
var url=encodeURIComponent("http://localhost:8080/repositories/rep_name?query=some_query&Accept=application/sparql-results+json");
$.ajax({
url: url,
type:'GET',
dataType: 'jsonp',
success: function(data, textStatus, xhr) {
// do something
$('#doQuery').html("QUERY");
},
error: function(xhr, textStatus, errorThrown) {
_UTILS.showModal("error", textStatus, 300, 100);
}
});
但是我在 chrome 中遇到了这个错误 "Uncaught SyntaxError: Unexpected token :"。我认为问题是我的服务器给我的响应没有用 jsonp 回调包装,因为当我检查我的响应时,它显示为普通的 json 格式,如下所示:
{
"head" : {
"vars" : [ "child", "parent", "count" ]
}
}
而不是这个:
callback({
"head" : {
"vars" : [ "child", "parent", "count" ]
}
})
但是当我检查来自 ajax 的请求 url 时,它实际上在 url 的末尾附加了“&callback=”参数,如下所示:
http://localhost:8080/repositories/rep_name?query=some_query&Accept=application/sparql-results+json&callback=jQuery21105273823537863791_1443406558624&_=1443406558625
那么为什么它仍然给我那个错误?
需要注意的是,服务器发回了一个.srj文件,但是是json格式的,不知道是不是跟报错有关系。另外,我不能使用 `dataType: 'json',否则我会得到 "XMLHttpRequest cannot load. No 'Access-Control-Allow-Origin' header is present on the requested resource." 错误。不过我不认为我可以更改服务器。
JSONP 回调参数是对服务器的提示,表明您希望 JSON 包含在回调中。如果服务器未专门设置为监听参数并在需要时提供 JSONP,则它将忽略该参数。
由于服务器上没有 Access-Control-Allow-Origin
header,使用纯 JSON 而不是 JSONP 也是 no-go。
我会仔细检查以确保没有其他方法可以从服务器请求 JSONP,否则如果您无权访问服务器上的代码,您可以'不要通过其他方式请求 JSONP,很遗憾,你运气不好。