跨域 GET 与 Marklogic 服务器端 js 应用程序
Cross Domain GET with Marklogic server side js app
这里有很多问题涉及跨域请求、CORS、headers等。我几乎尝试了所有我能找到的方法,但无济于事。 MarkLogic 文档中可能有关于此的内容,但我在那里浪费了几个小时,而且很难导航。也没有任何 MarkLogic 示例可以遵循(我已经能够找到)。
[Error] Origin http://localhost:8010 is not allowed by Access-Control- Allow-Origin.
[Error] Failed to load resource: Origin http://localhost:8010 is not allowed by Access-Control-Allow-Origin. (my-js.sjs, line 0)
[Error] XMLHttpRequest cannot load http://localhost:8004/my-js.sjs due to access control checks.
我会尽量包含所有相关信息,如果有遗漏请告诉我。
我在安装了 MarkLogic 9 的 Safari 上 运行 Mac OS X。我在端口 8004 上设置了一个 http 应用程序服务器。我在端口 8010 上还有一个 python SimpleHTTPServer 运行。我有一个简单的 html 站点,其中包含以下 js 脚本简单的 GET 请求
$("#http-button").click(function(){
console.log("clicked");
$.get("http://localhost:8004/my-js.sjs",function(data,status){
alert("Data: " + data + "\nStatus" + status);
$("#http-results").text(data);
})
});`
我的服务器端脚本 my-js.sjs 只是一个简单的查询。我已经包括了我认为允许跨域请求所必需的 headers,但它仍然不起作用。
//xdmp.setResponseContentType("text/plain");
xdmp.setResponseContentType("application/json");
xdmp.addResponseHeader('Access-Control-Allow-Origin', '*');
xdmp.addResponseHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
xdmp.addResponseHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
xdmp.addResponseHeader('Access-Control-Allow-Credentials', true);
var jsearch = require('/MarkLogic/jsearch.sjs');
//query and print
jsearch.documents()
.where(
cts.wordQuery("cardiac")
).slice(0,3).result();
我不知道从这里去哪里。我的实现依赖于能够执行跨域请求。我能够使用 node.js 和 REST 服务器来完成它,但我无法弄清楚如何使用服务器端 JavaScript 来完成它,这对我的目的来说要快得多。
我也乐于接受新的实现思路,但是我已经写了很多 server-side JavaScript,所以我宁愿不必重新开始。
好吧,对不起,如果我浪费了任何时间。原来这些 headers 成功了,我只是没有放
真
在引号中。
这里有很多问题涉及跨域请求、CORS、headers等。我几乎尝试了所有我能找到的方法,但无济于事。 MarkLogic 文档中可能有关于此的内容,但我在那里浪费了几个小时,而且很难导航。也没有任何 MarkLogic 示例可以遵循(我已经能够找到)。
[Error] Origin http://localhost:8010 is not allowed by Access-Control- Allow-Origin.
[Error] Failed to load resource: Origin http://localhost:8010 is not allowed by Access-Control-Allow-Origin. (my-js.sjs, line 0)
[Error] XMLHttpRequest cannot load http://localhost:8004/my-js.sjs due to access control checks.
我会尽量包含所有相关信息,如果有遗漏请告诉我。
我在安装了 MarkLogic 9 的 Safari 上 运行 Mac OS X。我在端口 8004 上设置了一个 http 应用程序服务器。我在端口 8010 上还有一个 python SimpleHTTPServer 运行。我有一个简单的 html 站点,其中包含以下 js 脚本简单的 GET 请求
$("#http-button").click(function(){
console.log("clicked");
$.get("http://localhost:8004/my-js.sjs",function(data,status){
alert("Data: " + data + "\nStatus" + status);
$("#http-results").text(data);
})
});`
我的服务器端脚本 my-js.sjs 只是一个简单的查询。我已经包括了我认为允许跨域请求所必需的 headers,但它仍然不起作用。
//xdmp.setResponseContentType("text/plain");
xdmp.setResponseContentType("application/json");
xdmp.addResponseHeader('Access-Control-Allow-Origin', '*');
xdmp.addResponseHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
xdmp.addResponseHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
xdmp.addResponseHeader('Access-Control-Allow-Credentials', true);
var jsearch = require('/MarkLogic/jsearch.sjs');
//query and print
jsearch.documents()
.where(
cts.wordQuery("cardiac")
).slice(0,3).result();
我不知道从这里去哪里。我的实现依赖于能够执行跨域请求。我能够使用 node.js 和 REST 服务器来完成它,但我无法弄清楚如何使用服务器端 JavaScript 来完成它,这对我的目的来说要快得多。
我也乐于接受新的实现思路,但是我已经写了很多 server-side JavaScript,所以我宁愿不必重新开始。
好吧,对不起,如果我浪费了任何时间。原来这些 headers 成功了,我只是没有放 真
在引号中。