Ajax POST запрос к сервису Restheart MongoDB

Я пытаюсь опубликовать на сервере Restheart/MongoDB с помощью jQuery/ajax с некоторыми трудностями. Ответ возвращается, как если бы я запустил GET, а не сообщение. И также кажется, что он пытается выполнить ответ, как если бы это был обратный вызов. Я предполагаю, что это потому, что я использую 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);
  }
        })

Вот скриншот ошибки из Firefox, когда я пытаюсь получить запрос. Вы можете видеть, что я передаю соответствующие заголовки (я считаю).

2 ответа

  1. не следует использовать JSONP с RESTHeart, так как он поддерживает CORS.

    try (я не пробовал код…)

    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) });
    
  2. Проблема с заголовком

    var myHeaders = {"Authorization":"Basic " + 'user:password'.toString('base64'),
    "Content-Type":"application/json; charset=utf-8" };

    Используйте функцию btoa() javascript для преобразования в string в base64.

    btoa("userid:password")

    Таким образом, финальная строка заголовка будет выглядеть как

    var myHeaders = {"Authorization":"Basic " + btoa("userid:password"),
    "Content-Type":"application/json; charset=utf-8" };