Estoy tratando de hacer una solicitud de API a una API privada (Itop alojada), hay un ejemplo en el documento con JQuery Ajax pero hice todas mis otras llamadas con fetch y quería hacer esta también pero no entiendo el respuesta correcta
El método fetch me devuelve un código 200 pero con HTML en lugar de JSON (con un contenido totalmente diferente al de jQuery AJAX JSON).
Aquí están las 2 funciones:
// Code made by myself - don't get the right response fetch(url, { method: "POST", headers: { "accept": "application/json", }, mode: "cors", accept: "application/json, text/javascript, *!/!*; q=0.01", body: JSON.stringify({ auth_user: user, auth_pwd: password, json_data: JSON.stringify({ "operation": "list_operations", }) }) }) .then(response => response.json()) .then(data => { console.log(data); }) // Code from the doc example - working $.ajax({ type: "POST", url: url, dataType: "json", data: { auth_user: user, auth_pwd: password, json_data: JSON.stringify({ "operation": "list_operations" }) }, crossDomain: 'true' }) .then( function(data, textStatus, jqXHR) { console.log(data); console.log(textStatus); console.log(jqXHR); }, function(jqXHR, textStatus, errorThrown) { console.debug(jqXHR); console.log("ERROR !!\n" + "status: " + textStatus + " (" + jqXHR.status + ")\n" + "error: " + errorThrown); } );En jQuery.ajax, cuando pasa data a un objeto:
application/x-www-form-urlencoded dataContent-Type: application/x-www-form-urlencoded En fetch, está pasando body una cadena de JSON y fetch incluirá un Content-Type: text/plain encabezado sin formato.
Asi que:
Pase a fetch un objeto URLSearchParams .
Esto se codificará con el formato correcto y la fetch deducirá el tipo de contenido correcto a partir de él.