views:

212

answers:

3

Hi there, I've been pulling my hair out trying to use jQuery.get() to pull in my dynamically generated RSS feed and I'm having nothing but issues, is my RSS feed the wrong format? If so can I convert it to the correct format using javascript?

Here's my feed: http://dev.chriscurddesign.co.uk/burns/p/rc_rss.php?rcf_id=0

Here's my code:

function get_rss_feed() {

        $(".content").empty();

        $.get("http://dev.chriscurddesign.co.uk/burns/p/rc_rss.php?rcf_id=0", function(d) {

            var i = 0;
            $(d).find('item').each(function() {

                var $item = $(this);
                var title = $item.find('title').text();
                var link = $item.find('link').text();
                var location = $item.find('location').text();
                var pubDate = $item.find('pubDate').text();

                var html = '<div class="entry"><a href="' + link + '" target="_blank">' + title + '</a></div>';

                $('.content').append(html);
                i++;
            });

        });
};

Any input would be greatly appreciated!! Thanks

A: 

Just use jFeed instead, this will make you code a lot simpler.

Shay Erlichmen
I've tried that and I still have the same problem, my feed just won't process!
bbeckford
does this solve the cross site scripting issues ? http://stackoverflow.com/search?q=calling+webservice+from+another+domain+using+jquery
pokrate
@pokrate no, it doesn't, I could have **guessed** that this is his problem, but sill my recommendation stands; its better use use jFeed (once he fixes the real issue)
Shay Erlichmen
Why do you think jFeed would be better in this instance? I'm only doing a very simple feed reader.
bbeckford
@bbeclford it starts simple (it always do) but how will it end? also jFeed doesn't require a lot of knowhow to jump right.
Shay Erlichmen
Haha, I will consider it in future but literally all I'm doing is pulling in the titles and links so simple jQuery is enough for me :)
bbeckford
+4  A: 

I tried this in IE and it worked ok.


$(document).ready(function() {
            $.get('http://dev.chriscurddesign.co.uk/burns/p/rc_rss.php?rcf_id=0',
                   'xml' , function(data) {
                alert(data);
            });
        });

This wont work in other browsers because of cross site scripting issues. The above code will only work if the page in which its residing is in the same domain. So, you have many options none of which is standard though. Best is make an ajax call to a url from your domain and then call the feed url from there ie; from server side. For more see this http://stackoverflow.com/search?q=calling+webservice+from+another+domain+using+jquery

pokrate
Great, thanks for the reply, I'll get on it and see if I can get it working, I'll post my findings!
bbeckford
I can confirm that the code works if you remove the "http://dev.chriscurddesign.co.uk/" (protocol+domain) part.
Álvaro G. Vicario
Thanks pokrate, that did the trick! I'm using a php proxy now to grab the rss and then jquery to process it. I'll put the full code in a new answer.
bbeckford
A: 

Thanks to pokrate for pointing out that it was a cross-domain issue. For future reference I'm using a php proxy now to grab the rss and then jquery to process it.

Here is the proxy (you need curl turned on in php):

<?php
    $session = curl_init($_GET['url']);
    curl_setopt($session, CURLOPT_HEADER, false);
    curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
    $xml = curl_exec($session);
    header("Content-Type: text/xml");appropriately
    echo $xml;
    curl_close($session);
?>

And here's my new javascript:

function get_rss_feed() {

    $(".content").empty();

    var feed = "http://dev.chriscurddesign.co.uk/burns/p/rc_rss.php?rcf_id=0";

    $.get("feedproxy.php?url=" + feed, function(d) {

        $(d).find('item').each(function() {

            var $item = $(this);
            var title = $item.find('title').text();
            var link = $item.find('link').text();

            var html = '<div class="entry"><a href="' + link + '" target="_blank">' + title + '</a></div>';

            $('.content').append(html);
        });

    });
};

Me = Happy Bunny :)

bbeckford