it-swarm.com.de

400 Fehler bei der fehlerhaften Anforderung in Jquery Ajax erhalten POST

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?

40
sachinjain024

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.

85
sachinjain024

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
1
Benoît Schiex

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);
  }
});
0

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.

0
Dulith De Costa