Estoy tratando de crear un lector de RSS simple con Phonegap y jQuery. Estoy siguiendo este tutorial: http://visualrinse.com/2008/09/24/how-to-build-a-simple-rss-reader-with-jquery/.Problemas al hacer solicitudes ajax con una aplicación Phonegap
He logrado que esto funcione perfectamente cuando pruebo el código en mi navegador. El archivo php recupera el feed y lo genera tal como lo esperaba. Pero cuando ejecuto el mismo archivo desde mi aplicación Phonegap compilada, la solicitud ajax simplemente devuelve el contenido del archivo php (el código php, no el resultado ejecutado).
He pasado horas buscando en Google esto y he probado numerosos tutoriales y ajustes. Tampoco encontré soluciones en los foros oficiales de Phonegap. ¿Qué estoy haciendo mal? El problema parece ser que PHP no responde a la solicitud. Intenté mover el archivo php a un dominio diferente pero el resultado es el mismo, funciona en mi navegador pero no en la aplicación compilada.
Aquí está el código jQuery que inicia el ajax-código:
function get_rss_feed() {
//clear the content in the div for the next feed.
$("#feed_content").empty().html('<img class="loader" src="js/images/ajax-loader.gif" alt=""/>');
$.ajax({
url: 'http://192.168.1.7/rssApp/www/rss-proxy.php?url=http://www.nytimes.com/services/xml/rss/nyt/GlobalHome.xml',
success: function parseRSS(d) {
//find each 'item' in the file and parse it
$(d).find('item').each(function() {
//name the current found item this for this particular loop run
var $item = $(this);
// grab the post title
var title = $item.find('title').text();
// grab the post's URL
var link = $item.find('link').text();
// next, the description
var description = $item.find('description').text();
//don't forget the pubdate
var pubDate = $item.find('pubDate').text();
// now create a var 'html' to store the markup we're using to output the feed to the browser window
var html = "<div class=\"entry\"><h2 class=\"postTitle\">" + title + "<\/h2>";
html += "<em class=\"date\">" + pubDate + "</em>";
html += "<p class=\"description\">" + description + "</p>";
html += "<a href=\"" + link + "\" target=\"_blank\">Read More >><\/a><\/div>";
//put that feed content on the screen!
$('#feed_content').append($(html));
});
$('#feed_content img.loader').fadeOut();
}
});
};
Aquí está la RSS-proxy.php que carga el XML de la URL y la emite:
<?php
// PHP Proxy
// Loads a XML from any location. Used with Flash/Flex apps to bypass security restrictions
// Author: Paulo Fierro
// January 29, 2006
// usage: proxy.php?url=http://mysite.com/myxml.xml
$session = curl_init($_GET['url']); // Open the Curl session
curl_setopt($session, CURLOPT_HEADER, false); // Don't return HTTP headers
curl_setopt($session, CURLOPT_RETURNTRANSFER, true); // Do return the contents of the call
$xml = curl_exec($session); // Make the call
header("Content-Type: text/xml"); // Set the content type appropriately
echo $xml; // Spit out the xml
curl_close($session); // And close the session
?>
Aconsejo eliminar esa dirección IP del código. – sciritai
¿Qué sucede cuando abre el archivo '.php' desde el navegador en el simulador o dispositivo? ¿El PHP se ejecuta? – Marko
¡Gracias por los comentarios! Intenté acceder al archivo '.php' desde el navegador en el simulador y funciona. Pero solo funciona si cambio la URL para que sea relativa, no absoluta: 'url: 'rss-proxy.php? Url = http: //www.nytimes.com/services/xml/rss/nyt/GlobalHome.xml' '. Si ahora uso el navegador Safari móvil para visitar el archivo index.html en mi carpeta www de mi aplicación Phonegap que estoy hospedando en mi servidor MAMP local en mi directorio 'htdocs' ¡funciona! Pero no de la aplicación Phonegap compilada. Y, por supuesto, el archivo '.php' se encuentra en la carpeta www junto con los otros archivos de script. – user1029978