J'essaie d'envoyer une requête Ajax POST à l'aide de Jquery mais je rencontre une erreur de 400 requêtes incorrectes.
Voici mon code:
$.ajax({
type: 'POST',
url: "http://localhost:8080/project/server/rest/subjects",
data: {
"subject:title":"Test Name",
"subject:description":"Creating test subject to check POST method API",
"sub:tags": ["facebook:work", "facebook:likes"],
"sampleSize" : 10,
"values": ["science", "machine-learning"]
},
error: function(e) {
console.log(e);
}
});
It Says: Impossible de construire une ressource à partir de request . Qu'est-ce qui me manque?
Enfin, j'ai eu l'erreur et la raison était que je devais renforcer les données JSON que j'envoyais. Je dois définir le type de contenu et le type de données dans l'objet XHR . La version correcte est donc ici:
$.ajax({
type: 'POST',
url: "http://localhost:8080/project/server/rest/subjects",
data: JSON.stringify({
"subject:title":"Test Name",
"subject:description":"Creating test subject to check POST method API",
"sub:tags": ["facebook:work", "facebook:likes"],
"sampleSize" : 10,
"values": ["science", "machine-learning"]
}),
error: function(e) {
console.log(e);
},
dataType: "json",
contentType: "application/json"
});
Peut-être que cela aidera quelqu'un d'autre.
La question est un peu ancienne ... mais juste au cas où quelqu'un rencontrerait l'erreur 400, cela pourrait aussi venir de la nécessité de poster csrfToken en tant que paramètre de la requête de publication.
Vous devez obtenir le nom et la valeur de l'artisanat dans votre modèle:
<script type="text/javascript">
window.csrfTokenName = "{{ craft.config.csrfTokenName|e('js') }}";
window.csrfTokenValue = "{{ craft.request.csrfToken|e('js') }}";
</script>
et passez-les dans votre demande
data: window.csrfTokenName+"="+window.csrfTokenValue
Vous devez créer une requête à partir d'un objet "data" à l'aide de la fonction suivante
function buildQuery(obj) {
var Result= '';
if(typeof(obj)== 'object') {
jQuery.each(obj, function(key, value) {
Result+= (Result) ? '&' : '';
if(typeof(value)== 'object' && value.length) {
for(var i=0; i<value.length; i++) {
Result+= [key+'[]', encodeURIComponent(value[i])].join('=');
}
} else {
Result+= [key, encodeURIComponent(value)].join('=');
}
});
}
return Result;
}
et ensuite procéder avec
var data= {
"subject:title":"Test Name",
"subject:description":"Creating test subject to check POST method API",
"sub:tags": ["facebook:work, facebook:likes"],
"sampleSize" : 10,
"values": ["science", "machine-learning"]
}
$.ajax({
type: 'POST',
url: "http://localhost:8080/project/server/rest/subjects",
data: buildQuery(data),
error: function(e) {
console.log(e);
}
});
Oui. Vous devez stringify
l'erreur JSON
data orlse 400 bad request
car elle ne peut pas identifier les données.
400 Bad Request
Mauvaise Demande. Votre navigateur a demandé que ce serveur ne puisse pas comprendre.
De plus, vous devez également ajouter content type
et datatype
. Sinon, vous rencontrerez une erreur 415
qui dit Unsupported Media Type
.
415 Type de support non pris en charge
Essaye ça.
var newData = {
"subject:title":"Test Name",
"subject:description":"Creating test subject to check POST method API",
"sub:tags": ["facebook:work", "facebook:likes"],
"sampleSize" : 10,
"values": ["science", "machine-learning"]
};
var dataJson = JSON.stringify(newData);
$.ajax({
type: 'POST',
url: "http://localhost:8080/project/server/rest/subjects",
data: dataJson,
error: function(e) {
console.log(e);
},
dataType: "json",
contentType: "application/json"
});
De cette façon, vous pouvez facilement modifier les données dont vous avez besoin. Cela ne vous déroutera pas car il est défini en dehors du bloc ajax.