CORS问题 - 从Backbone JS调用Web服务

时间:2015-10-21 05:17:37

标签: javascript jquery web-services backbone.js

我正在探索骨干js,我的要求是将用户详细信息(如姓名,电子邮件ID等)发布到Web服务。但是当我运行应用程序时,我会收到错误,

在Chrome上,

  

XMLHttpRequest无法加载localhost:8080 / service / customer /。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点'localhost:8050'访问。

在Firefox上,

  

阻止跨源请求:同源策略禁止在localhost:8080 / service / customer /读取远程资源。 (原因:缺少CORS标题'Access-Control-Allow-Origin'。)

来自两个浏览器的标题响应是

On Chrome On Firefox

我已经在互联网上进行了研究并确定为CORS问题,但我很困惑,我需要在我的JS文件中添加任何代码配置以及放置这些代码的位置。如果有任何代码,我是否需要将代码放在单独的js文件中?

以下是我的验证js文件的代码片段,

var ValidationModel = Backbone.Model.extend({

urlRoot: 'http://localhost:8080/service/customer',
defaults: {
    ID: '',
    fname: '',
    lname: '',
    email: ''.....
myValidationModel.save(myValidationModel.attributes,
        {
    success: function(model, response, options){
        console.log('Model Saved..');
        console.log('ID: ' + myValidationModel.get('id'));
    },
    error: function(model, xhr, options){
        console.log('Failed to save model');
    }...

我真诚地请求你的朋友,因为我是新手,请你给我一个想法,指导,如何解决这个问题的建议,以及在哪里放置代码。如果你能把我链接到任何有用的文章,那将是一个很大的好处。

非常感谢你。

1 个答案:

答案 0 :(得分:1)

这是服务器端问题。 This提供了如何在不同平台上启用CORS的很好的总结。

如果您因为在本地开发而感到困惑,请注意不同的PORT编号也会导致CORS错误。

例如,我在http://localhost:8080有一个服务器上运行了一个网站。我还有另一个网站http://localhost:8082,该网站使用8080上的服务,这会导致CORS问题。

客户端唯一需要注意的是,如果添加任何其他标头,则必须将服务器端的CORS配置为允许这些标头。例如,我添加了以下安全令牌,以便主干可以访问服务器端的模型数据:

$.ajaxSetup({
    headers : {
        "X-Auth-Token" : usercredentials.getAccessToken(),
    }
});

这意味着服务器端的CORS必须允许标头X-Auth-Token。如果您没有添加任何其他标题,那么通常您只需配置Origin并允许相关方法GETPOSTPUT等等。 。 。

在您的情况下,您似乎必须在服务器上配置CORS以允许来自POST Origin的{​​{1}}来电。客户端将自动添加此标头。服务器只需要允许它。