Postman Work and jQuery Dont

Responder
ramirezosvaldo
Mensajes: 127
Registered for: 3 years 4 months
Mexico

Postman Work and jQuery Dont

Mensaje por ramirezosvaldo »

Hola, buenos tardes.


Mi problema fue que intentando probar un API mio, desde postman a mi servidor ( Xbase++ y xb2net ), trabajaba excelente, pero cuando ya se puso en la pagina
usando Laravel, mi webserver no le llegaba bien, y de plano regresaba errores de tipo CORS.

Pero un poquito de transfondo.

Tengo un webserver corriendo ( En vez de apache), este webserver me permite al igual que modharbour, correr programs como por ejemplo ( http://localhost/facturaticket.prg)

Para probar mi escript, estaba usando Postman y en postman enviaba los datos a mi webserver como POST, y los datos los ponia en el BODY con formato json.
Ya dentro webserver, el contenido me llega bien, el POST bien, el uri, bien, todo bonito, y dentro de mi Script pues igual, todo bien y bonito.

El problema surgio cuando probamos mi script usando laravel y nada, luego usamos jQuery ...., algo asi ... y nada.

$.ajax({
type: "POST",
url: 'http://10.1.7.3:8080/prg/facturaticket.prg',
dataType: 'json',
data: JSON.stringify({
"rfc": "RAOS730225U80",
"nombre": "OSVALDO RAMIREZ",
"sucursal": 1,}),
success: function(result) { alert("good!") },
error: function(jqXHR, textStatus, errorThrown) { alert(textStatus) }
});

Y cuando se ejecutaba, pues no me llegaba bien el contenido del BODY, yo lo esperaba como string o json pero no, .... me llegaba como un FORM

Y es que jQuery tiene un metodo llamado 'contentType' que si no se especifica, por default tiene de valor de "application / x-www-form-urlencoded"
por lo tanto en mi script prg, cuando me llegaba, no me llegaba com string/json, me llegaba como un FORM y no sabia porque rayos en Postman me funcionaba
bien y en jQuery no.

Asi que mi solucion fue que en mi script prg, tengo que validar como me llega el contenido del BODY, si como FORM o como string, y actuar dependiendo de esto.

Ahora, tambien empeze a jugar cambiando el contentType en el jQuery, pero si lo cambio, el jQuery me envia primero OPTIONS y luego el POST y ya con esto, pues
me perdi mas.

Por lo pronto, asi solucione mi problema; Y como dato: Si alguien se va a conectar a nuestros sitios, debemos saber con que framework se va a conectar para saber
que valores vienen en la cabezeras y poder hacer bien nuestros API'.

Quedo para cualquier comentario y aclaro soy novato, asi que debe haber otras cosas mejores.

Saludos
Osvaldo Ramirez

ramirezosvaldo
Mensajes: 127
Registered for: 3 years 4 months
Mexico

Mensaje por ramirezosvaldo »

Porfa Osvaldo

Ahora pruébalo con modharbour haber como te funciona, y nos dices.

Saludetes.

Cristobal
Site Admin
Mensajes: 315
Registered for: 3 years 5 months
Spain

Mensaje por Cristobal »

Osvaldo, lo que no he entendido es lo que dices que te pasa si el content-type lo cambias a : "application/json"
Saludos
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces

ramirezosvaldo
Mensajes: 127
Registered for: 3 years 4 months
Mexico

Mensaje por ramirezosvaldo »

Cristobal, buen dia.

Cuando en el codigo jQuery, cambiamos el 'default' por 'application/json', jQuery en vez de POST, envía el OPTIONS.
y si en web server no tengo esto:

oClient:HTTPResponse:setheader('Access-Control-Allow-Origin', "*")
oClient:HTTPResponse:setheader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS' )
oClient:HTTPResponse:setheader('Access-Control-Allow-Headers', "Content-Type, Content-Encoding, Accept-Language, Accept-Encoding, Accept-Charset, SOAPAction")

al cliente le envia errores de CORS, pero de ahi ya no puede pasar para poder recibir bien el contenido.

Saludos
Osvaldo Ramirez

ramirezosvaldo
Mensajes: 127
Registered for: 3 years 4 months
Mexico

Mensaje por ramirezosvaldo »

Buen dia.

Mi conclusión seria.

Postman tiene cabeceras por default y jquery también.

Por lo tanto hay que revisar bien que cabeceras usa postman para meterlas
en jQuery.

Luego viene el segundo problema, si se cambian las cabeceras en jQuery
hay que ver que hay que cambiar en el webserver, ya que al cambiar las cabeceras, pueda
ser que jQuery énvienles primero un OPTIONS luego un POST.

Y para esto hay que habilitar nuestro webserver que maneje esto.

Y por ultimo para recordar, en jQuery en contentType: Determina como se envían los datos json/text/form
Asi que cuando el cliente envíe datos, el server debera saber como los envia para poder hacer la transformación
adecuada del contenido.

Espero no haber enredado mas el tema.

Saludos
Osvaldo Ramirez

Responder