2011-05-18 27 views
6

Mi problema es que quiero devolver un archivo xml del servidor al cliente y analizarlo utilizando la función ajax de jquery. Este es el código:devuelve xml en jquery ajax

Cliente:

$("#submit").click(function(){   
    $.ajax({ 
     type: "POST", 
     url: "search.php", 
     data: "whatever", 
     dataType: "xml", 
     async: false, 
     success: function(xml){ 
      var data = $('doctor',xml).text(); 
      alert(data); 
     } 
    }); 
}); 

Server (archivo PHP),

header('Content-type: text/xml'); 
echo '<?xml version="1.0" encoding="utf-8"?>'; 
echo "<tables>"; 
echo "<doctor>Someone</doctor>"; 
echo "</tables>"; 

Tengo una alerta en blanco y yo no sé por qué ??


ok Lo encontré. mi archivo php estaba en esta forma

//some code 
include("other.php"); 
//some other code 

donde el archivo other.php era el archivo que publiqué anteriormente. I cortar/pegar el encabezado de modo que el archivo php final sería

//some code 
header('Content-type: text/xml'); 
include("other.php"); 
//some other code 

y other.php

echo '<?xml version="1.0" encoding="utf-8"?>'; 
echo "<tables>"; 
echo "<doctor>Someone</doctor>"; 
echo "</tables>"; 

ahora funciona perfecto. ¡Gracias por sus respuestas rápidas!

+0

¿Tiene $ (XML) .find ("doctor") el trabajo? –

Respuesta

1

Prueba esto: var data = $(xml).find('doctor').text()

En su ejemplo, 'xml' no es un objeto jQuery.

+0

Esto no funcionará en IE por http://stackoverflow.com/questions/562283/jquery-find-doesnt-return-data-in-ie-do-does-in-firefox-and-chrome – Avitus

+0

ty para el ¡Respuesta rápida! no funciona tampoco –

0

Necesitas analizar este XML (que realmente no entiendo por qué, pero ...), lo puede hacer por hacer:

$(xml).find('doctor').text(); 

adiós. :)

0

usted tiene que cambiar su función sea:

$("#submit").click(function(){  
    $.ajax({ 
     type: "POST", 
     url: "search.php", 
     data: "whatever", 
     dataType: "xml", 
     async: false, 
     success: function(xml){ 

      var xmlDoc; 

      if (window.DOMParser) { 
       parser = new DOMParser(); 
       xmlDoc = parser.parseFromString(xml, "text/xml"); 
      } 
      else {// Internet Explorer 
       xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
       xmlDoc.async = "false"; 
       xmlDoc.loadXML(xml); 
      } 
      var $response = $(xmlDoc); 
      var data = $response.find("doctor").text() 

      alert(data); 
     } 
    }); 
}); 

La razón de la si (window.DOMParser) { es que usted tiene un problema con IE haciendo el análisis.

+0

no funciona en absoluto. Ejecuto la aplicación en Firefox 4. Probé IE9 pero no muestra la alerta en absoluto. –

2

Esto está trabajando lima fina

Post.php

if($_GET['id']!=""){  
    $array = array('satyam' => 'satyam', 
        'class' => 'B.TECH', 
        'company' => 'Ranosys'); 
} 

$new ='<?xml version="1.0" encoding="iso-8859-1"?><data>'; 
foreach($array as $key => $values){ 
    $new .= "<$key>$values</$key>"; 
} 
echo $new.'</data>'; 

================= 

function load_data(){ 
    $.ajax({ 
     url: "post.php", 
     async: false, // stop browser for another activity 
     data: "id=satyam", 
     // dataType :'xml', 
     error: function(e, b, error) { 
      for(var i in e){ 
       // alert(i); 
      } 
      alert(e.respone); 
     }, 
     success: function(msg) { 
      //alert($response); 
      var data = $(msg).find("satyam").text(); 
      alert(data); 
     } 
    }); 
}