我正在尝试将一个简单的json对象发送到cloudant数据库,但我一直收到错误。我为cloudant数据库设置了允许读,写和复制的权限。 我已经尝试重写ajax帖子,我添加了一个没有解决错误的标题,但我一直收到错误,似乎无法找到原因。
确切的错误是:
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
function QuestionObject(q, o, a){
this.question = q;
this.options = o;
this.answer = a;
}
function createQuestion(){
var q = $('#question').val();
console.log("question: "+q);
var o = $('#options').val().split(',');
var a = $('#answer').val();
var question = new QuestionObject(q,o,a);
var jsonQ = JSON.stringify(question);
console.log("json string"+jsonQ);
$('#question').val("");
$('#options').val("");
$('#answer').val("");
return jsonQ;
}
function saveQuestionToDB(){
var urlDB = 'https://birdoftravel.cloudant.com/questions/_all_docs/';
var data = createQuestion();
console.log("data :"+data);
/* $.ajax({
url: urlDB,
type: "POST",
dataType: "application/json",
data: data,
success: function(){
alert('The question was posted!');
},
error: function(err){
console.log("error: "+err+" question not posted: "+data);
}
});*/
$.ajax({
type: "POST",
url: urlDB,
data: data,
success: function(d){
console.log("question was posted!"+d);
},
error: function(e){
console.log("not posted! "+e);
},
dataType: "application/json",
});
}
$('#btn').click(function(e){
saveQuestionToDB();
e.preventDefault();
});
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="quizStyle.css">
<script
src="https://code.jquery.com/jquery-1.12.4.min.js"
integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ="
crossorigin="anonymous">
</script>
<title>Add a new quiz</title>
</head>
<body>
<h2>Enter a new quiz</h2>
<form id="newQuizForm">
Insert question:<br>
<input type="text" id="question"><br>
Insert optional answers seperated by ;<br>
<input type="text" id="options"><br>
Insert correct answer:<br>
<input type="text" id="answer"><br>
<input type="submit" id="btn" value="Save question">
</form>
<script src="saveQuestion.js"></script>
</body>
</html>
答案 0 :(得分:0)
您正在将请求发送到错误的API端点。向POST
(https://birdoftravel.cloudant.com/questions
)发送https://$USERNAME.cloudant.com/$DATABASE
请求,插入操作应成功。有关详细信息,请参阅https://console.ng.bluemix.net/docs/services/Cloudant/api/document.html#create。
您使用的端点https://birdoftravel.cloudant.com/questions/_all_docs
列出了数据库中的所有文档:https://console.ng.bluemix.net/docs/services/Cloudant/api/database.html#get-documents
您的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"
});
}
由于您在浏览器中运行此操作,因此需要启用CORS,否则您的请求将失败:https://console.ng.bluemix.net/docs/services/Cloudant/api/cors.html#cors