jquery ajax post http-status-code-400

Obteniendo 400 error de solicitud incorrecta en Jquery Ajax POST



http-status-code-400 (4)

Estoy intentando enviar una solicitud POST de Ajax utilizando Jquery, pero estoy teniendo un error de solicitud incorrecta de 400.

Aquí está mi código:

$.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); } });

Dice: No se puede generar recurso a partir de la solicitud. Qué me estoy perdiendo ?


Finalmente, recibí el error y la razón era que necesitaba codificar los datos JSON que estaba enviando. Tengo que establecer el tipo de contenido y el tipo de datos en el objeto XHR. Entonces la versión correcta está aquí:

$.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" });

Puede ser que ayudará a alguien más.


La pregunta es un poco antigua ... pero solo en caso de que alguien se enfrente al error 400, también puede deberse a la necesidad de publicar csrfToken como un parámetro para la solicitud posterior.

Debes obtener el nombre y el valor de la artesanía en tu plantilla:

<script type="text/javascript"> window.csrfTokenName = "{{ craft.config.csrfTokenName|e(''js'') }}"; window.csrfTokenValue = "{{ craft.request.csrfToken|e(''js'') }}"; </script>

y páselos en su solicitud

data: window.csrfTokenName+"="+window.csrfTokenValue


Necesita generar una consulta del objeto "data" usando la siguiente función

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

y luego proceder con

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


Sí. Necesita stringify los datos JSON o se produce un error de 400 bad request errores, ya que no puede identificar los datos.

400 Bad Request

Solicitud incorrecta. Su navegador envió una solicitud que este servidor no pudo entender.

Además, necesita agregar content type y content type datatype también. Si no, encontrará un error 415 que dice Unsupported Media Type .

415 Tipo de medio no admitido

Prueba esto.

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 esta forma, puede modificar los datos que necesita con facilidad. No te confundirá ya que se define fuera del bloque ajax.