Javascript 将Json文件发布到cloudant公共数据库时出错415
我试图将一个简单的json对象发送到cloudant数据库,但一直收到一个错误。我将cloudant数据库的权限设置为允许读、写和复制。 我已经尝试过重写要放置的ajax帖子,我添加了一个没有解决错误的标题,但是我一直收到错误,似乎找不到原因 确切的错误是:Javascript 将Json文件发布到cloudant公共数据库时出错415,javascript,jquery,json,ajax,cloudant,Javascript,Jquery,Json,Ajax,Cloudant,我试图将一个简单的json对象发送到cloudant数据库,但一直收到一个错误。我将cloudant数据库的权限设置为允许读、写和复制。 我已经尝试过重写要放置的ajax帖子,我添加了一个没有解决错误的标题,但是我一直收到错误,似乎找不到原因 确切的错误是: POST https://birdoftravel.cloudant.com/questions/_all_docs/ 415 (Unsupported Media Type) send @ jquery-1.12.4.min.js:4 a
POST https://birdoftravel.cloudant.com/questions/_all_docs/ 415 (Unsupported Media Type)
send @ jquery-1.12.4.min.js:4
ajax @ jquery-1.12.4.min.js:4
saveQuestionToDB @ saveQuestion.js:54
(anonymous) @ saveQuestion.js:77
dispatch @ jquery-1.12.4.min.js:3
r.handle @ jquery-1.12.4.min.js:3
函数问题对象(q,o,a){
这个问题=q;
这个选项=o;
这个答案=a;
}
函数createQuestion(){
var q=$(“#问题”).val();
控制台日志(“问题:+q”);
var o=$('#options').val().split(',');
var a=$('答案').val();
变量问题=新问题对象(q、o、a);
var jsonQ=JSON.stringify(问题);
log(“json字符串”+jsonQ);
$('问题').val(“”);
$(“#选项”).val(“”);
$('答案').val(“”);
返回jsonQ;
}
函数saveQuestionToDB(){
var urlDB=https://birdoftravel.cloudant.com/questions/_all_docs/';
var data=createQuestion();
console.log(“数据:”+数据);
/*$.ajax({
url:urlDB,
类型:“POST”,
数据类型:“应用程序/json”,
数据:数据,
成功:函数(){
警惕(“问题已发布!”);
},
错误:函数(err){
日志(“错误:+err+”问题未发布:+data);
}
});*/
$.ajax({
类型:“POST”,
url:urlDB,
数据:数据,
成功:功能(d){
log(“问题已发布!”+d);
},
错误:函数(e){
console.log(“未发布!”+e);
},
数据类型:“应用程序/json”,
});
}
$('#btn')。单击(函数(e){
saveQuestionToDB();
e、 预防默认值();
});代码>
添加新的测验
进入一个新的测验
插入问题:
插入可选答案,答案之间用空格分隔
插入正确答案:
您将请求发送到错误的API端点。向https://birdoftravel.cloudant.com/questions
(https://$USERNAME.cloudant.com/$DATABASE
)和插入操作应成功。有关详细信息,请参阅
您正在使用的端点https://birdoftravel.cloudant.com/questions/_all_docs
列出数据库中的所有文档:
下面的javascript代码修改版本对我很有用。注意这些变化:
- 网址
- 授权头
- 内容类型标题
function saveQuestionToDB(){
var urlDB = 'https://<cloudant-user-name>.cloudant.com/questions';
var data = createQuestion();
console.log("data :"+data);
$.ajax({
type: "POST",
beforeSend: function (xhr) {
xhr.setRequestHeader ("Authorization", "Basic " + btoa('<cloudant-user-name>' + ":" + '<cloudant-password>));
},
url: urlDB,
data: data,
success: function(d){
console.log("question was posted!"+ JSON.stringify(d));
},
error: function(j,t,s){
console.log("not posted! "+ JSON.stringify(j));
console.log("not posted! "+ JSON.stringify(t));
console.log("not posted! "+ JSON.stringify(s));
},
contentType: "application/json"
});
}
函数saveQuestionToDB(){
var urlDB=https://.cloudant.com/questions';
var data=createQuestion();
console.log(“数据:”+数据);
$.ajax({
类型:“POST”,
发送前:函数(xhr){
xhr.setRequestHeader(“授权”、“基本”+btoa(“+”:“+”));
},
url:urlDB,
数据:数据,
成功:功能(d){
log(“发布了问题!”+JSON.stringify(d));
},
错误:函数(j,t,s){
log(“未发布!”+JSON.stringify(j));
log(“未发布!”+JSON.stringify(t));
log(“未发布!”+JSON.stringify(s));
},
contentType:“应用程序/json”
});
}
由于您是在浏览器中运行此功能,因此需要启用CORS,否则您的请求将失败:即使更改为该功能,它仍会给出相同的415错误。我也试着和邮递员一起发邮件,但我也犯了同样的错误。{“error”:“bad_content_type”,“reason”:“content type必须是application/json”}发送一个get可以工作,但我真的不明白为什么它不工作。我发送了一个额外的参数,让content type为json,现在它给出了一个关于json的utf-8的错误。请参阅我原始响应中的更新。要在Cloudant中启用CORS,请打开帐户选项卡并选择CORS。