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