Ir al contenido



Foto

Problema CORS en script AJAX


  • Por favor identifícate para responder
4 respuestas en este tema

#1 giulichajari

giulichajari

    Advanced Member

  • Miembros
  • PipPipPip
  • 433 mensajes

Escrito 27 agosto 2018 - 07:25

Hola trabajo con AJAX y PHP. Tengo este codigo:


javascript
  1. $(document).ready(function() {
  2. listarDetalle();
  3.  
  4. });
  5. function listarDetalle(){
  6. var accion="listar";
  7.  
  8. $.ajax({
  9.  
  10. type: "POST",
  11. url: "//gestionweb/includes/php/procesoDetalle.php",
  12. data: { "accion":accion},
  13. dataType:'json',
  14. crossDomain: true,
  15. error: function(){
  16. alert("error petición ajax");
  17.  
  18. },
  19.  
  20. success: function(data){
  21. console.log(data);
  22.  
  23.  
  24. for (var i = 0; i < data.length; i++) {
  25.  
  26. var newRow =
  27. "<tr>" +
  28. "<td>" + data[i].idp + "</td>" +
  29. "<td>" + data[i].nombre + "</td>"
  30. "<td>" + data[i].marca + "</td>" +
  31. "<td>" + data[i].cantidad + "</td>" +
  32. "<td><input type='radio' id='"+data[i].idproducto+"' name='seleccion'/></td>"+
  33. "</tr>";
  34. $(newRow).appendTo("#ticket tbody");
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42. } }
  43.  
  44. }).fail( function( jqXHR, textStatus, errorThrown ) {
  45.  
  46. if (jqXHR.status === 0) {
  47.  
  48. alert('Not connect: Verify Network.');
  49.  
  50. } else if (jqXHR.status == 404) {
  51.  
  52. alert('Requested page not found [404]');
  53.  
  54.  
  55. } else if (jqXHR.status == 500) {
  56.  
  57. alert('Internal Server Error [500].');
  58.  
  59. } else if (textStatus === 'parsererror') {
  60.  
  61. alert('Requested JSON parse failed.');
  62.  
  63. } else if (textStatus === 'timeout') {
  64.  
  65. alert('Time out error.');
  66.  
  67. } else if (textStatus === 'abort') {
  68.  
  69. alert('Ajax request aborted.');
  70.  
  71. } else {
  72.  
  73. alert('Uncaught Error: ' + jqXHR.responseText);
  74.  
  75. }
  76.  
  77. });;
  78.  
  79. };

El mismo deberia listar todos los registros de una factura(cantidad descripcion,etc) y llama a proceso Detalle:


php
  1. <?php
  2. /* Listado de URLs (orígenes) que tienen acceso al API (sin / al final) */
  3. $autorizados = [
  4. 'http://localhost',
  5. 'https://localhost',
  6. ];
  7. /* Comprobamos que el origen esté en el listado de orígenes permitidos */
  8. if (
  9. isset($_SERVER['HTTP_ORIGIN'])
  10. && in_array($_SERVER['HTTP_ORIGIN'], $autorizados) === true
  11. ) {
  12. /* Sólo autorizamos el origen validado */
  13. header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);
  14. }
  15.  
  16. header('Content-Type: application/json; charset=utf-8');
  17. [
  18. 'idp' => '1',
  19. 'nombre' => 'Nombre 1',
  20. 'marca' => 'Marca 1',
  21. 'cantidad' => 4,
  22. ],
  23. ]);
  24. header('Content-Type: application/json; charset=utf-8');
  25. include ("../../models/claseTicket.php");
  26.  
  27.  
  28. if (isset($_POST['accion'])){
  29. if ($_POST['accion']=="listar"){
  30.  
  31.  
  32.  
  33. }else if ($_POST['accion']=="agregar"){
  34.  
  35. $detalle = new detalleTicket();
  36. $detalle->id = $_POST['id'];
  37. $detalle->precio = $_POST['precio'];
  38. $detalle->cantidad = $_POST['cantidad'];
  39. $detalle->nombre = $_POST['nombre'];
  40.  
  41.  
  42. if(isset($_SESSION['carrito'])){
  43. $carrito = $_SESSION['carrito'];
  44. } else {
  45. $carrito = array();
  46. }
  47.  
  48. array_push($carrito, $detalle);
  49. $_SESSION['carrito'] = $carrito;
  50.  
  51. }
  52.  
  53. header('Location: ../index.php');
  54.  
  55. }
  56.  
  57.  
  58. ?>

El codigo lo hice viendo videos y buscando en las web..pero es la unica peticion con la que ocurre esto, las demas no.

 

Me dice

Pedido de Origen cruzado bloqueado: La Política de mismo origen no permite leer el recurso remoto en http://gestionweb/in...cesoDetalle.php. (Razón: el pedido de CORS fue rechazado).

 

Gracias


  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.408 mensajes
  • LocationRepública Dominicana

Escrito 28 agosto 2018 - 04:36

Es local o servidor?, ¿y qué tipo de servidor es?, ¿Apache,Nginx ó IIS?


  • 0

#3 giulichajari

giulichajari

    Advanced Member

  • Miembros
  • PipPipPip
  • 433 mensajes

Escrito 29 agosto 2018 - 10:43

Es local o servidor?, ¿y qué tipo de servidor es?, ¿Apache,Nginx ó IIS?

Es local..estoy desarrollando uso XAMPP seria Apache.

Hay otros script que llaman a procesodetalle.php y no pasa ningun error:

 

chrome_zpsw9yu1xmo.jpg

 

chrome2_zpsrmp7vukj.png

 

Ahi te adjunte dos capturas de los encabezados.

La direccion esta bien porque dice localhost/gestionweb y la direccion completa


  • 0

#4 giulichajari

giulichajari

    Advanced Member

  • Miembros
  • PipPipPip
  • 433 mensajes

Escrito 30 agosto 2018 - 06:04

Lo que me llama la atencion es que dice status:302, como que hay un error con procesoDetalle.php.

La documentacion de Mozilla dice https://developer.mo...HTTP/Status/302 pero mucho nmo entiendo.

 

Si intento abrir el archivo solo en el navegador, directamente me da status 200 esta perfecto.


  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.408 mensajes
  • LocationRepública Dominicana

Escrito 30 agosto 2018 - 04:23

Sucede que debes habilitar el CORS desde el servidor no desde el request, siempre y cuando el origen de la solicitud provenga de otro lado que no sea en el mismo servidor, si haces una petición desde el mismo servidor no hay problema, fuera de ahí ocurre el CORS, la única forma es habilitarla es desde el servidor en este caso procesoDetalle.php agregandole el siguiente encabezado (o enviandola):


php
  1. header("Access-Control-Allow-Origin: *");

Debería de ser suficiente.

 

Saludos.


  • 1