我想从我的JavaScript发送一个简单网址请求,以便不会将基本网址添加到请求网址中。例如,请求应发送到以下网址(没有基本网址):
SAPEVENT:SOME_TEXT?2
我使用了jQuery的$.ajax
函数来实现它,但没有成功。
这是一个JSFiddle: http://jsfiddle.net/txb6tdjj/2/
JS代码:
function sendEvent(id) {
$.ajax("SAPEVENT:SOME_TEXT?" + id);
}
sendEvent(2);
我在JS控制台中看到以下错误:
XMLHttpRequest无法加载sapevent:SOME_TEXT?2。交叉原始请求 仅支持HTTP。 (jquery的-2.1.0.js:8556)
我甚至设置了参数crossDomain: true
,但它没有帮助:
http://jsfiddle.net/auhx2v2v/3/
JS代码:
function sendEvent(id) {
$.ajax({
url: "SAPEVENT:SOME_TEXT?" + id,
crossDomain: true
});
}
sendEvent(2);
最终会出现同样的错误。
它在HTML中正常工作如下: http://jsfiddle.net/1f6npcn2/2/
正常运行的HTML代码:
<FORM action="SAPEVENT:PRESS_ME">
<A HREF="SAPEVENT:CLICK_ON_ME">Click on me to send an event!</A>
<INPUT TYPE="submit" VALUE="Press me to send an event!"/>
</FORM>
但我需要在JavaScript 中实现它,以便可以在JavaScript中的URL中动态设置请求参数。
您是否知道如何在JS中实现它,以便将请求发送到没有基本网址的网址SAPEVENT:SOME_TEXT?2
?
有关使用过的浏览器的其他信息:该错误仅在Chrome中显示。 IE和Firefox没有显示错误,但他们也没有发送请求。
SAP人员的其他信息:我知道有一个SAP Note 191908表明这是不可能的,但是一位同事已经确认他已经在使用相同功能的HTML页面中成功测试了此类功能我上面复制的代码(请参阅上面的HTML代码和http://jsfiddle.net/1f6npcn2/2/)。所以SAP Note是错误的。我知道如何在HTML中实现此功能,但我不知道如何在JS中实现它。这就是问题所在。
答案 0 :(得分:1)
我没有与SAP合作的经验,但我认为你在这里缺少一个关键部分。
在您提供的示例中,SAPEVENT:CLICK_ON_ME
根本不是http网址,而是会使用参数SAPEVENT
在本地计算机上调用处理CLICK_ON_ME
- 协议的任何内容。我猜你在你的计算机上安装了某种类型的客户端来为你做这件事(how do I create my own URL protocol? (e.g. so://...)包含更多关于如何实现这一点的信息。)
您的错误消息谈论crossdomain-stuff的原因可能是因为它试图将其解释为host:port
。
所以换句话说,因为这不是一个http url,所以没有一个Web服务器在另一端工作,因此你不能对它进行ajax请求。
答案 1 :(得分:1)
SAPEVENT:
内容不由任何Web服务器处理。 SAP GUI使用嵌入式Internet Explorer并注册自定义协议处理程序。尝试使用ajax技术是没有用的,因为你需要到达客户端的容器,而不是服务器。重申:你不想发送请求&#34;在任何地方,你想说服浏览器发生某个本地导航事件&#34;。 SAP Note 191908包含有关该主题的更多信息。
答案 2 :(得分:0)
不了解SAP视图,但对我而言,这似乎是网络服务器上的常见行为。 我认为SAPEVENT在运行时被服务器解析为更常规的URI。只有视图被解析,而不是像CSS和JS这样的资源,因此JS文件中的SAPEVENT占位符不会被#39 ;解析后,JS解释器不接受它作为有效的URI。解决此问题的常见方法之一是在HTML中创建隐藏表单,或者只创建包含您需要的服务器生成值的隐藏输入。例如
SAP查看:
<input type="hidden" id="my_event_url" value="SAPEVENT:PRESS_ME">
JS:
function sendEvent(id) {
$.ajax({
url: $('#my_event_url').val() + '?' + id,
crossDomain: true
});
}
sendEvent(2);
答案 3 :(得分:0)
我终于在JavaScript中实现了它。谢谢转到this web page。 我修改了此网页中显示的解决方案,以便在JavaScript中添加链接而不是表单。 这是JS的工作解决方案:
var targetUrl = "SAPEVENT:SOME_TEXT?2";
function sendSapEvent(targetUrl) {
var link = document.createElement("a");
link.setAttribute("style", "display:none;");
link.setAttribute("href", targetUrl);
// Move the click function to another variable
// so that it doesn't get overwritten.
link._click_function_ = link.click;
document.body.appendChild(link);
link._click_function_();
}
sendSapEvent(targetUrl);
你也可以在这个JSFiddle中找到它:http://jsfiddle.net/708r95p0/6/
有效!它向URL sapevent:SOME_TEXT?2
我决定使用链接而不是表单元素,因为我无法使用表单传递请求参数。