Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/04/2013, 13:07
Gustavo1973
 
Fecha de Ingreso: abril-2007
Ubicación: Merlo
Mensajes: 314
Antigüedad: 17 años, 8 meses
Puntos: 3
lectura de datos con ajax no funciona en IE

Hola, tengo el siguiente problema, hago una actualización de stock de articulos, hasta ahí funciona bien. Pero si hay un erro, me debe tirar una alert y al input le debe recargar el dato que aun esta en la bd, lo hice asi.
En FF, Chrome, opera y Safari funciona ok!!
Funcion javascript en el archivo HTML
Código HTML:
Ver original
  1. <script language="JavaScript">
  2. <!--
  3. function ActualizaStock(form)
  4. {
  5.     var cantidad = form.canti.value;
  6.     var id = form.id.value;
  7.     var a = mysql_update_query("update stock set cantidad = " + cantidad + " WHERE id_producto = " + id);
  8.     if(a)
  9.     {
  10.         alert("Actualizacion Realizada Satisfactoriamente");
  11.     }
  12.     else
  13.     {
  14.         alert("No se Pudo Actualizar el Precio");
  15.        
  16.     }
  17.     var b = mysql_consulta_valor("SELECT cantidad FROM stock WHERE id_producto = " + id, "cantidad");
  18.         alert(b);
  19.         document.getElementById('form_'+id).canti.value = b;
  20. }
  21. //-->

El form lo armo asi, de forma dinamica!!!
Código PHP:
Ver original
  1. while($fila = mysql_fetch_array($result))
  2. {
  3.     ?>
  4.     <tr>
  5.     <td class="ctd"><?=$fila['id_productos'];?></td>
  6.     <td class="ctd"align="center">
  7.     <?
  8.     if((strlen(CAT_IMAGE_DIR)+2) < strlen($fila['imagen']))
  9.     {
  10.     ?>
  11.         <a href="http://www.forosdelweb.com/f13/<?=$fila['imagen'];?>" rel="lightbox"><img src="http://www.forosdelweb.com/f13/<?=$fila['imagen'];?>"width="90"></a>
  12.     <?
  13.     }
  14.     ?>
  15.     </td>
  16.     <td class="ctd"><a><?=$fila['titulo'];?></a></td><td class="ctd"align="center">
  17.     <form method="POST" id="form_<?=$fila['id_productos'];?>">
  18.         <input type="text" name="canti" size="10"value="<?=trae_stock($fila['id_productos']);?>"><input type="hidden"name="id" value="<?=$fila['id_productos'];?>">
  19.         <input type="button"onclick="ActualizaStock(this.form); return false"value="Cargar">
  20.     </form>
  21.     </td>
  22.  
  23.     </tr>
  24.     <?
  25. }
  26. ?>


Archivo JS de Ajax.
Código Javascript:
Ver original
  1. var urlMysqlwsphp="mysql_js.php";
  2. function mysql_update_query(query) {
  3.     var req = new ajaxRequest();
  4.     var url = urlMysqlwsphp + "?q=" + query + "&op=1";
  5.     req.open("GET", url, false)
  6.     req.send(null);
  7.     return req.responseText;
  8. }
  9. function mysql_select_query(query) {
  10.     var req = new ajaxRequest();
  11.     var url = urlMysqlwsphp + "?q=" + query + "&op=2";
  12.     req.open("GET", url, false)
  13.     req.send(null);
  14.     return req.responseText;
  15. }
  16. function mysql_consulta_valor(query, dato){
  17.     var req = new ajaxRequest();
  18.     var url = urlMysqlwsphp + "?q=" + query + "&d=" + dato + "&op=3";
  19.     req.open("GET", url, false)
  20.     req.send(null);
  21.     return req.responseText;
  22. }
  23.  
  24. function ajaxRequest() {
  25.     try {
  26.         var request = new XMLHttpRequest();
  27.     } catch (e1) {
  28.         try {
  29.             request = new ActiveXObject("Msxml2.XMLHTTP");
  30.         } catch (e2) {
  31.             try {
  32.                 request = new ActiveXObject("Microsoft.XMLHTTP");
  33.             } catch (e3) {
  34.                 request = false;
  35.             }
  36.         }
  37.     }
  38.     return request;
  39. }
Archivo PHP: mysql_js.php
Código PHP:
Ver original
  1. <?
  2. $sql = $_GET['q'];
  3. $op = $_GET['op'];
  4. $dato = $_GET['d'];
  5.  
  6. $sql = str_replace("\\","",$sql);
  7. switch($op)
  8. {
  9.     case 1:
  10.         $res = mysql_consulta($sql);
  11.     break;
  12.     case 2:
  13.         $res = mysql_consulta_codigo($sql);
  14.     break;
  15.     case 3:
  16.         $res = mysql_consulta_valor($sql, $dato);
  17.     break;
  18. }
  19. echo $res;
  20. return;
  21. function mysql_consulta($sql)
  22. {
  23.     include("include/conexion.php");
  24.     $result = mysql_query($sql);
  25.     if(!$result){
  26.         return false;
  27.     }
  28.     return true;
  29. }
  30. function mysql_consulta_valor($sql, $dato)
  31. {
  32.     include("include/conexion.php");
  33.     $result = mysql_query($sql);
  34.     if(!$result){
  35.         return false;
  36.     }
  37.     if($fila = mysql_fetch_array($result))
  38.     {
  39.         $res = $fila[$dato];
  40.     }
  41.     else
  42.     {
  43.         $res = false;
  44.     }
  45.     return $res;
  46. }
  47. function mysql_consulta_codigo($sql)
  48. {
  49.     include("include/conexion.php");
  50.     $result = mysql_query($sql);
  51.     if(!$result){
  52.         $res = 3;
  53.         exit;
  54.     }
  55.     if($fila = mysql_fetch_array($result))
  56.     {
  57.         $res = true;
  58.     }
  59.     else
  60.     {
  61.         $res = false;
  62.     }
  63.     return $res;
  64. }
  65. ?>
Por lo que veo, en IE la funcion mysql_consulta_valor devuelve el valor anterior o un 1.
Puede ser un tema de cache???

Esto este inspirado en la biblioteca mysqlws.js, ya que no se mucho de Ajax!!
Cualquier ayuda viene re bien!!!
Muchas Gracias!!!

Última edición por Gustavo1973; 29/04/2013 a las 13:22