0

我正在尝试使用 jQuery/ajax 发布到 Restheart/MongoDB 服务器,但有些困难。返回的响应就像我运行的是 GET 而不是 POST。而且它似乎也在尝试执行响应,就好像它是一个回调一样。我猜那是因为我使用的是 jsonp (?)。但是如果我不使用 jsonp,我会收到一个 CORS 错误(我的数据库服务器与我的开发计算机不同)。但是我为 Allow-Origin 设置了标题:*. 想法?

    myHeaders = {"Authorization":"Basic " + 'user:password'.toString('base64'),
            "Content-Type":"application/json; charset=utf-8",
            "Access-Control-Allow-Origin": "*",
            "Access-Control-Allow-Headers": "*"
            }   

    $.ajax({
    method: "POST",
    crossDomain: true,
    contentType: "application/json",
    headers: myHeaders,
    dataType : 'jsonp',
    jsonp: 'jsonp', // mongod is expecting the parameter name to be called "jsonp"
      url: "http://mydomain:80/db/people",
      data: JSON.stringify({ "name": "John", "location": "Boston" }),
        success: function (data) {
    console.log('success' + data);
  },
  error: function (XMLHttpRequest, textStatus, errorThrown) {
    console.log('error', errorThrown);
  }
        })

这是我尝试 GET 请求时来自 Firefox 的错误截图。你可以看到我传递了适当的标题(我相信)。

4

2 回答 2

0

问题在于标题

var myHeaders = {"Authorization":"Basic " + 'user:password'.toString('base64'), "Content-Type":"application/json; charset=utf-8" }; 使用 javascript 的 btoa() 函数将字符串转换为 base64。

btoa("userid:password")

所以,最终的标题字符串看起来像

var myHeaders = {"Authorization":"Basic " + btoa("userid:password"), "Content-Type":"application/json; charset=utf-8" };

于 2017-08-21T09:24:23.013 回答
0

您不应该将 JSONP 与 RESTHeart 一起使用,因为它支持 CORS。

尝试(我还没有尝试过代码...)

var myHeaders = {"Authorization":"Basic " + 'user:password'.toString('base64'),
             "Content-Type":"application/json; charset=utf-8" }; 

$.ajax("http://mydomain:80/db/people", { method: "POST",
     crossDomain: true,
     contentType: "application/json",
     headers: myHeaders,
     dataType : 'json',
     jsonp: false,
     data: JSON.stringify({ "name": "John", "location": "Boston" })
})
.done(function( data, textStatus, jqXHR ) { console.log(textStatus) }))
.fail(function( jqXHR, textStatus, errorThrown ) { console.log('error', textStatus) });
于 2017-01-17T09:06:27.357 回答