对Restheart MongoDB服务的Ajax POST请求

时间:2017-01-15 21:36:02

标签: jquery ajax mongodb restheart

我正在尝试使用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的错误的屏幕截图。你可以看到我传递了相应的标题(我相信)。

2 个答案:

答案 0 :(得分: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) });

答案 1 :(得分: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" };