我正在尝试解析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);
}
});
但是我得到了这个错误"Uncaught SyntaxError: Unexpected token:"在chrome中。我认为问题是我的服务器给我的响应没有包装json回调,因为当我检查我的响应时,它显示为像这样的纯json格式:
{
"head" : {
"vars" : [ "child", "parent", "count" ]
}
}
而不是:
callback({
"head" : {
"vars" : [ "child", "parent", "count" ]
}
})
但是当我检查来自ajax的请求url时,它实际上有"&callback="参数附加到url的末尾,像这样:
http://localhost:8080/repositories/rep_name?query=some_query&Accept=application/sparql-results+json&callback=jQuery21105273823537863791_1443406558624&_=1443406558625
为什么它仍然给我那个错误呢?
有一件事要注意的是,服务器发送回一个。srj文件,但它是json格式,我不知道这是否与错误有关。此外,我不能使用' dataType: 'json',否则我会得到"XMLHttpRequest无法加载。请求的资源上没有'Access-Control-Allow-Origin'标头。"但是我不认为我可以改变服务器
JSONP回调参数是对服务器的一个提示,您希望JSON封装在回调中。如果服务器没有专门设置为侦听参数并在需要时提供JSONP,那么它将忽略该参数。
由于服务器上没有Access-Control-Allow-Origin
标头,使用纯JSON代替JSONP也是不允许的。
我会仔细检查以确保没有其他方式从服务器请求JSONP,否则,如果您无法访问服务器上的代码,并且无法通过其他方式请求JSONP,那么您将不幸地失去运气。