Ich versuche, eine Ajax POST -Anforderung mit Jquery zu senden, aber ich habe 400 Fehler bei der fehlerhaften Anforderung.
Hier ist mein 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);
}
});
Es heißt: Kann aus Anforderung keine Ressource erstellen. Was fehlt mir?
Schließlich bekam ich den Fehler und der Grund war, dass ich die gesendeten JSON-Daten festlegen musste. Ich muss den Inhaltstyp und den Datentyp im XHR-Objekt festlegen. Die richtige Version ist hier:
$.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"
});
Vielleicht hilft es jemand anderem.
Die Frage ist etwas alt ... aber für den Fall, dass jemand den Fehler 400 hat, kann es auch die Notwendigkeit sein, csrfToken als Parameter für die Post-Anfrage anzugeben.
Sie müssen den Namen und den Wert des Handwerks in Ihrer Vorlage erhalten:
<script type="text/javascript">
window.csrfTokenName = "{{ craft.config.csrfTokenName|e('js') }}";
window.csrfTokenValue = "{{ craft.request.csrfToken|e('js') }}";
</script>
und übergeben Sie sie in Ihrer Anfrage
data: window.csrfTokenName+"="+window.csrfTokenValue
Sie müssen eine Abfrage aus einem "Daten" -Objekt mithilfe der folgenden Funktion erstellen
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;
}
und dann weiter mit
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);
}
});
Ja. Sie müssen stringify
den JSON
-Datenfehler oder 400 bad request
-Fehler auftreten, da er die Daten nicht identifizieren kann.
400 Bad Request
Ungültige Anforderung. Ihr Browser hat eine Anfrage gesendet, dass dieser Server nicht verstehen.
Außerdem müssen Sie content type
und datatype
hinzufügen. Andernfalls tritt ein 415
-Fehler auf, der Unsupported Media Type
sagt.
415 Nicht unterstützter Medientyp
Versuche dies.
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"
});
Auf diese Weise können Sie die benötigten Daten problemlos ändern. Es wird Sie nicht verwirren, da es außerhalb des Ajax-Blocks definiert ist.