$ .post(到不同的域)不工作(端口8081上的node.js / express app)

时间:2014-02-24 05:56:40

标签: javascript jquery node.js express cors

以这种方式使用$ .post时收到错误POST https://thewebsite.com 400 (Bad Request)

$.post("https://website.com/blabla",
{
  domain: "infoinfo.com",
  room: "someInfo",
  application: "someInfo",
  ident: "someInfo",
},
function (data,status) {
  alert("Data: " + data + "\nStatus: " + status);
});

我尝试在我的路线中设置res.header('Access-Control-Allow-Origin', "*");,但这不起作用。

关于如何解决这个问题的任何想法?

Ps。:我发布的服务器是服务网站(xirsys.com),我很确定它们已经允许外部域名。如果我找不到解决方案,我会在白天联系他们(我正在使用他们建议的jQuery帖子:/

4 个答案:

答案 0 :(得分:0)

这是由于同源策略。作为安全措施的所有浏览器都不允许任何跨域请求。

http://en.wikipedia.org/wiki/Same-origin_policy

与您的情况类似,您将从其他域发布到thewebsite.com域。解决方法是使用jQuery中的jsonp(服务器应该支持json填充)。

查看这些网站以获取更多信息

http://www.jquery4u.com/json/jsonp-examples/
http://en.wikipedia.org/wiki/JSONP
http://stackoverflow.com/questions/6871021/how-to-enable-cross-domain-request-on-the-server

答案 1 :(得分:0)

尝试将此添加到您的AJAX调用中:

contentType: "application/json; charset=utf-8",
dataType: "json"

另一个原因可能是因为相同的原产地政策:

  

在计算中,相同的原始政策是一个重要的安全概念   对于许多浏览器端编程语言,例如   JavaScript的。该策略允许在源自页面上运行的脚本   从同一个站点访问彼此的方法和属性   没有具体的限制,但阻止访问大多数方法和   不同网站上页面的属性。

您可以从MDN docs找到有关此问题的更多信息,或者在Google上就此主题进行一些研究。


您可以尝试使用$.axax(),如下所示:

$.ajax({
    type: 'POST',
    url: "https://website.com/blabla",
    data: {
        domain: "infoinfo.com",
        room: "someInfo",
        application: "someInfo",
        ident: "someInfo"
    },
    dataType: "json",
    contentType: "application/json",
    success: function (e) {
        alert("Data: " + data + "\nStatus: " + status);
    }

});

答案 2 :(得分:0)

样品申请:

$.ajax({
            url: "http://yoururl",
            type: "POST",
            crossDomain: true,
            data: JSON.stringify(somejson),
            dataType: "json",
            success: function (response) {
                alert("success");
            },
            error: function (xhr, status) {
                alert("error");
            }
        });

PYTHON的样本回应:

response = HttpResponse(json.dumps('{"status" : "success"}'))
response.__setitem__("Content-type", "application/json")
response.__setitem__("Access-Control-Allow-Origin", "*")

return response

答案 3 :(得分:0)

我发布的链接实际上并不好。我使用的服务更新了其API中的链接以反映正确的链接。