web-dev-qa-db-fra.com

Conversion de la commande curl en jQuery $ .ajax ()

J'essaie de faire un appel api avec jquery ajax, j'ai une boucle qui fonctionne pour l'api, mais mon ajax lance HTTP 500

J'ai une commande curl qui fonctionne comme ceci:

curl -u "username:password" -H "Content-Type: application/json" -H "Accept: application/json" -d '{"foo":"bar"}' http://www.example.com/api

J'ai essayé ajax comme ça, mais ça ne marche pas:

$.ajax({
    url: "http://www.example.com/api",
    beforeSend: function(xhr) { 
      xhr.setRequestHeader("Authorization", "Basic " + btoa("username:password")); 
    },
    type: 'POST',
    dataType: 'json',
    contentType: 'application/json',
    data: {foo:"bar"},
    success: function (data) {
      alert(JSON.stringify(data));
    },
    error: function(){
      alert("Cannot get data");
    }
});

Qu'est-ce que je rate ?

14
krisrak

Par défaut $ .ajax () convertira data en une chaîne de requête, si ce n'est déjà une chaîne, puisque data voici un objet, changez le data en chaîne et puis définissez processData: false, afin qu'il ne soit pas converti en chaîne de requête.

$.ajax({
    url: "http://www.example.com/api",
    beforeSend: function(xhr) { 
      xhr.setRequestHeader("Authorization", "Basic " + btoa("username:password")); 
    },
    type: 'POST',
    dataType: 'json',
    contentType: 'application/json',
    processData: false,
    data: '{"foo":"bar"}',
    success: function (data) {
      alert(JSON.stringify(data));
    },
    error: function(){
      alert("Cannot get data");
    }
});
29
krisrak