【发布时间】:2012-05-28 11:55:44
【问题描述】:
谁能给我看一个例子,说明如何加载使用 jQuery 的 getJSON 查询 Sesame SPARQL 端点产生的 .srj 文件?我已经尝试设置 Accept 标头和其他技巧,但我仍然看到 200 代码并且显然没有错误,但是没有加载文件的内容。
$.getJSON("http://localhost:8090/openrdf-sesame/repositories/myrepo?queryLn=SPARQL&query=QUERY&limit=none&infer=true&Accept=application%2Fsparql-results%2Bjson",
{
},
function(data) {
alert('data = ', data);
});
我已经尝试过类似的方法和无数其他变体,但仍然无法正常工作。我不得不提到我测试了这两种情况:
- Tomcat 未安装在 Apache 中,我们有一个 跨域请求 - 我尝试设置所有 在浏览器中需要;
- Tomcat 安装在 Apache 中 - 据我所知不需要 任何其他工作,但仍然没有成功。
这是请求标头:
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip, deflate
Accept-Language:en-us,en;q=0.5
Connection:keep-aliveHost:localhost:8090
Origin:http://localhost
Referer:http://localhost/d3v280/examples/ablodvis/localtest.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0
这是响应标头:
Content-Disposition:attachment; filename=query-result.srj
Content-Language:en-US
Content-Type:application/sparql-results+json;charset=UTF-8
Date:Mon, 28 May 2012 14:06:06 GMT
Server:Apache-Coyote/1.1
Transfer-Encoding:chunked
如您所见,我确实在 query-result.srj 文件中得到了结果,但我不知道如何访问它。 我非常喜欢第一个版本的工作,但显然我错过了一些东西。所有类似的 getJSON 请求都有效。
这是几乎可行的请求:
$.ajax({
beforeSend: function(xhrObj){
xhrObj.setRequestHeader("Accept","application/sparql-results+json");
},
dataType: 'jsonp',
url: queryUrl,
success: function(data) {
// callback code here
console.log("source: " + data.length)
alert('success!');
}
});
但是,它在 Firefox 中引发“无效标签错误”,而在 Chrome 中它不会引发任何错误,但正如我在 查询结果的 第二行 中看到的那样。 srj 文件显示 Uncaught SyntaxError: Unexpected token :。以下是响应的第一行:
{
"head": {
"vars": [ "s", "p", "o", "r" ]
},
"results": {
"bindings": [ ...
这次我能够看到请求成功完成并在我的浏览器中看到它(至少在 Chrome 和 Firefox 的调试模式下)。我应该明白 jsonp 技巧不适用于 Sesame 吗?如果我从 Sesame 得到答案,将其复制到一个文件中,将其重命名为 file.js 并使用 $.getJSON 加载它可以正常工作...我不想拥有任何服务器端此应用程序的代码,只是为了直接处理 SPARQL 查询的结果。我已经通过 $.getJSON 或 $.ajax 轻松设置了其他来源(WorldBank、DBPedia 等)。
最好的问候!
【问题讨论】:
-
如果解决了您的问题,请随意回答您自己的问题并接受答案(这样其他人很容易看到解决方案是什么)。
-
它仍然没有修复,这就是它在评论中的原因......但我确实编辑了问题以反映当前状态
-
我对 jQuery 不是很有经验,如果这是个愚蠢的问题,很抱歉,但是:如果将数据类型设置为 'json' 而不是 'jsonp' 会发生什么?
-
还是不行。如果您发出普通的 json 请求,则数据类型为“json”或“jsonp”(参见stackoverflow.com/questions/2067472/please-explain-jsonp 和json-p.org)。使用 jQuery 尝试时,json 请求将仅以代码 200 退出,而 jsonp 请求将起作用,但会在 query-results.sjr 文件的第二行引发错误。现在由于我没有在服务器端进行任何更改,因为我不需要/不想这样做,唯一的解释似乎是 Sesame 不支持 jsonp,但为什么正常请求不起作用很难得到。
标签: javascript jquery json sesame