2016-02-29 56 views
0

我想通过这样的请求,接收信息(联系人列表)到网址:

var oModel = new sap.ui.model.odata.ODataModel(
    "http://myserver.abc.com:8010/sap/opu/odata/sap/contact_person_srv/ContactPerson" 
); 
console.log(oModel); 

如果我在通过浏览器这个地址询问,一切工作正常:

Request Method:GET 
Status Code:200 OK 
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:en-US,en;q=0.8,en-US;q=0.6,en;q=0.4,uk;q=0.2 
Cache-Control:max-age=0 
Connection:keep-alive 
Cookie:sap-contextid=SID%3aANON%3asyb-nr8_NR8_10%3akz_pnaJCXLoloQuOmUyvxNcb9BVY8nZMBEzdU43u-NEW; SAPWP_active=1; sap-login-XSRF_NR8=20160225162649-bzlhG6X3gJoHL7alyJfmiQ%3d%3d; sap-usercontext=sap-language=RU&sap-client=100; SAP_SESSIONID_NR8_100=vfnkrJWROAaG0TLwlhWVE5FPeNLb3BHlhF4ADCnEUZs%3d 
Host:myserver.abc.com:8010 
Upgrade-Insecure-Requests:1 
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36 

但是,从我的控制器的要求采取以下形式:

Request URL:http://myserver.abc.com:8010/sap/opu/odata/sap/contact_person_srv/ContactPerson/$metadata 
Request Method:OPTIONS 

Accept:*/* 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:en-US,en;q=0.8,en-US;q=0.6,en;q=0.4,uk;q=0.2 
Access-Control-Request-Headers:accept, accept-language, maxdataserviceversion 
Access-Control-Request-Method:GET 
Connection:keep-alive 
Host:myserver.abc.com:8010 
Origin:http://localhost:63342 
Referer:http://localhost:63342/test/webapp/index.html 
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36 

为什么请求的方法 - OPTIONS

如何使GET

为什么把它添加到请求字符串/$metadata

服务器响应于请求XML消息发送,如何获得导致普通的javascript对象的数据?

如果我会做这种方式:

$.ajax({ 
     type: 'GET', 
     url: 'http://myserver.abc.com:8010/sap/opu/odata/sap/contact_person_srv/ContactPerson', 
     success: function(data){ 
      console.log(data) 
     } 
    }); 

这一切工作正常!

我附从截图服务器响应,帮助我理解。

enter image description here

+1

“元数据”包含有关通过网络发送的类型的重要信息。否则,你的客户不知道你是否收到一个'Integer'或'String'或'Bool'。实际的响应数据实际上是作为JS对象存储的。我相信它可以通过'oModel.oData'找到。但请记住它已加载异步并且不可立即使用。 – Marc

+0

@Marc,你可以在我的例子中展示如何做正确的事情? – sanu0074

+0

@ sanu0074您是否找到了解决方案? –

回答

0

您需要$metadata部分第一,所以你知道会发生,看http://www.odata.org/documentation/odata-version-2-0/overview/第3和第5

至于HTTP OPTIONS要求什么类型的,这有最有可能与CORS做的,该请求将通过OPTIONS请求预先运行。

+0

我明白这是后端麻烦?附:对于CORS我使用它:https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=en – sanu0074

+0

没有,当然没有麻烦,它实际上是预期的行为:)看到的是https: //developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS关于预先请求的请求的段落。但是你的实际问题是什么? – Qualiture

+0

我不明白!你可以根据我的问题中的数据编写一个示例? 我的问题是,我无法获取请求'http://myserver.abc.com:8010/sap/opu/odata/sap/contact_person_srv/ContactPerson'上的数据,因为自动请求会变成'.../ContactPerson/$ metadata'并且服务器返回错误400错误请求(针对预检的响应具有无效的HTTP状态码400) – sanu0074

相关问题