我读了很多关于CORS&Javascript和关于更改帖子中的标题,但我找不到我正在寻找的正确示例。
所以我首先要解释一下情况:
- 我无法更改Web服务器的任何内容,因为这是我无法访问的(它是SAP云门户)
- 我只能更改POST代码,所以我只能控制我发送的内容
我遇到的问题在以下文章中进行了描述:jQuery$.ajax(),$.post发送"OPTIONS";作为Firefox 中的REQUEST_METHOD
-->我的FF&Chrome标头发送METHOD OPTIONS而不是METHOD POST。
我已经写了在IE中工作但在FF&铬:
var dataString = "<result><firstname>example</firstname><lastname>ThisIsSparta</lastname></result>";
var urlString = "http://delyo001.you.local:8000/sap/bc/youconsulting/ws/rest/anonymous/z_names_post";
//Add TO SAP.
var aData =
jQuery.ajax({
type: "POST",
contentType: "application/xml",
url: urlString, // for different servers cross-domain restrictions need to be handled
data: dataString,
dataType: "text",
success: function(xml) { // callback called when data is received
//oModel.setData(data); // fill the received data into the JSONModel
alert("success to post");
},
error: function(xml) { // callback called when data is received
//oModel.setData(data); // fill the received data into the JSONModel
alert("fail to post");
}
});
});
或
var invocation = new XMLHttpRequest();
var url = 'http://delyo001.you.local:8000/sap/bc/youconsulting/ws/rest/anonymous/z_names_post';
var body = '<result><firstname>perthyrtyrtygop</firstname><lastname>sparta</lastname></result>';
invocation.open('POST', url, true);
invocation.setRequestHeader('X-PINGOTHER', 'pingpong');
invocation.setRequestHeader('Content-Type', 'application/xml');
invocation.send(body);
我找到了两种方法来解决这个问题,但没有任何例子:-用代理人做点什么?-发送特定标头
有关我的问题的更多信息,请访问:-http://scn.sap.com/message/13697625#13697625
如果您不能在服务器端设置正确的头,也不能修改jsonP的响应,那么您确实应该使用代理。
代理脚本是一种中间件。您向脚本发出请求,脚本获取数据并将其返回给您。例如php代理。您可以在asp、jsp、flash甚至javaapplet中做同样的事情。
现在您有了SAP服务,一个位于首选位置的代理(php)文件,以及与代理位于同一域的本地javascript。你甚至不需要CORS。
如果你想把代理放在另一个域中,你必须确保php文件发送正确的头。(Access-Control-Allow-Origin yourdomain
或Access-Control-Allow-Origin * for allow all
)