Próbuję utworzyć prosty czytnik RSS z Phonegap i jQuery. Postępuję zgodnie z tym samouczkiem: http://visualrinse.com/2008/09/24/how-to-build-a-simple-rss-reader-with-jquery/.Problemy z obsługą zapytań ajaxowych za pomocą aplikacji Phonegap
Udało mi się sprawić, żeby działało dobrze, gdy wypróbuję kod w przeglądarce. Plik php pobiera plik danych i wydaje go dokładnie tak, jak tego oczekuję. Ale kiedy uruchomię ten sam plik z mojej skompilowanej aplikacji Phonegap, ajax-request właśnie zwróci zawartość pliku php (php-code, a nie wykonanego wyniku).
Spędziłem wiele godzin na wyszukiwaniu i wypróbowywaniu wielu tutoriali i poprawek. Nie znalazłem też rozwiązań na oficjalnych forach Phonegap. Co ja robię źle? Problem wydaje się być PHP nie odpowiada na żądanie. Próbowałem przenieść plik php do innej domeny, ale wynik jest taki sam, działa w mojej przeglądarce, ale nie w skompilowanej aplikacji.
Oto kod jQuery, który inicjuje ajax-kod:
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();
}
});
};
oto rss-proxy.php który ładuje plik XML z URL i wyjść to:
<?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
?>
Zalecam usunięcie tego adresu IP z kodu. – sciritai
Co się stanie, gdy otworzysz plik '.php' z przeglądarki na symulatorze lub urządzeniu? Czy PHP zostaje wykonane? – Marko
Dzięki za komentarze! Próbowałem uzyskać dostęp do pliku '.php' z przeglądarki w symulatorze i to działa. Ale działa tylko wtedy, gdy zmienię adres URL na względny, a nie bezwzględny: 'url: 'rss-proxy.php? Url = http: //www.nytimes.com/services/xml/rss/nyt/GlobalHome.xml' '. Jeśli teraz używam mobilnej przeglądarki Safari do odwiedzenia pliku index.html w moim folderze www mojej aplikacji Phonegap, którą hostuję na moim lokalnym serwerze MAMP w moim katalogu 'htdocs' działa! Ale nie ze skompilowanej aplikacji Phonegap. Oczywiście plik '.php' znajduje się w folderze www wraz z innymi plikami skryptów. – user1029978