错误415将Json文件发布到cloudant公共数据库

时间:2017-02-15 12:08:56

标签: 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
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>

1 个答案:

答案 0 :(得分:0)

您正在将请求发送到错误的API端点。向POSThttps://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代码的以下修改版本适合我。请注意更改:

  • URL
  • 授权标题
  • 内容类型标题

    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