Javascript jQuery通过CORS发布到webservice

Javascript jQuery通过CORS发布到webservice,javascript,jquery,web-services,sap,cors,Javascript,Jquery,Web Services,Sap,Cors,我在你的文章中读了很多关于CORS和Javascript以及关于更改标题的主题,但是我找不到合适的例子 所以我首先要解释一下情况: 我无法更改Web服务器的任何内容,因为这是我无法访问的(这是一个SAP云门户) 我只能更改邮政编码,所以我只能控制我发送的内容 下面的帖子描述了我遇到的问题: -->我的FF&Chrome标头发送方法选项,而不是方法POST 我编写的示例代码适用于IE,但不适用于FF&Chrome: var dataString = "<result><fi

我在你的文章中读了很多关于CORS和Javascript以及关于更改标题的主题,但是我找不到合适的例子

所以我首先要解释一下情况:

  • 我无法更改Web服务器的任何内容,因为这是我无法访问的(这是一个SAP云门户)
  • 我只能更改邮政编码,所以我只能控制我发送的内容
下面的帖子描述了我遇到的问题:

-->我的FF&Chrome标头发送方法选项,而不是方法POST

我编写的示例代码适用于IE,但不适用于FF&Chrome:

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 dataString=“examplethisisparta”;
var urlString=”http://delyo001.you.local:8000/sap/bc/youconsulting/ws/rest/anonymous/z_names_post";
//添加到SAP。
变量aData=
jQuery.ajax({
类型:“POST”,
contentType:“应用程序/xml”,
url:urlString,//对于不同的服务器,需要处理跨域限制
数据:dataString,
数据类型:“文本”,
成功:收到数据时调用函数(xml){//回调
//oModel.setData(data);//将接收到的数据填充到JSONModel中
警报(“成功发布”);
},
错误:收到数据时调用函数(xml){//回调
//oModel.setData(data);//将接收到的数据填充到JSONModel中
警报(“未能发布”);
}
});
});

var invocation=newXMLHttpRequest();
var url='1〕http://delyo001.you.local:8000/sap/bc/youconsulting/ws/rest/anonymous/z_names_post';
变量主体='perthyrtygopsparta';
open('POST',url,true);
setRequestHeader('X-PINGOTHER','pingpong');
setRequestHeader('Content-Type','application/xml');
调用发送(body);
我找到了两种方法来解决这个问题,但没有任何示例: -用代理做些什么? -发送特定的标题

有关我的问题的更多信息,请访问:
-

如果您无法在服务器端设置正确的头,并且无法修改jsonP的响应,那么您确实应该使用代理

代理脚本是一种中间件。您向脚本发出请求,脚本获取数据并将其返回给您。例如您可以在asp、jsp、flash甚至Javaapplet中实现同样的功能

现在您有了SAP服务、位于首选位置的代理(php)文件,以及与代理位于同一域的本地javascript。你甚至不需要CORS


如果要将代理放在另一个域中,必须确保php文件发送正确的头。(
Access Control Allow Origin yourdomain
Access Control Allow Origin*for Allow all

我需要找到一种通过代理实现这一点的方法:)选项请求是一个CORS“飞行前请求”,因为您使用的是一个不常见的
内容类型
头,这使得它成为一个“非简单”CORS请求。非简单请求要求浏览器向服务器发送选项请求,以验证谓词和标题是否符合要求。我在中讨论了非简单请求,其中还链接到。你好,VDP,感谢您的回复!这确实是正确的方法,我将尝试找到一些可以编辑的Javascript代码。再次感谢!
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);