2009-04-17 25 views
9

Non riesco a far funzionare il mio file JSON quando lo richiama da un altro dominio utilizzando JQuerys getJSON. Ho inserito la parte di callback alla fine dell'URL ma non ho ancora gioia. Firebug mi dice la sua una questione di dominio croce, che sembra avere un senso come se metto il file JSON localmente il codice qui sotto (escludendo il ? Jsoncallback =? funziona bene)Jquery getJSON cross domain problems

Heres la parte Jquery

$.getJSON("http://anotherdomain/js/morearticles.js?jsoncallback=?", 
    function(json){ 
     if (show5More.nextSetCount < json.items.length) { // Check not on last group of data 
      $('#lineupswitch li').hide(); // Hide the existing items  
      $.each(json.items, function(key,value){ // Loop over the returned data from the json file 
       if (key === show5More.nextSetCount) { // If the itteration is equal to the datablock continure 
        show5More.nextSetCount = show5More.nextSetCount + 1; // 
        $(value).each(function(index) { 
         if((index % 2) == 0) { 
          $('<li class="even ' + this.cname +'"><a href="' + this.href + '" class="lineup-thumb"><img src="' + this.thumbimg + '" /></a><h3><a href="' + this.href + '">' + this.titletext + '</a></h3><p>' + this.paratext + '</p></li>').appendTo("#lineupswitch"); 
          } else { 
           $('<li class="odd ' + this.cname +'"><a href="' + this.href + '" class="lineup-thumb"><img src="' + this.thumbimg + '" /></a><h3><a href="' + this.href + '">' + this.titletext + '</a></h3><p>' + this.paratext + '</p></li>').appendTo("#lineupswitch");        
          } 
        }); 
        return false; 
       } 
      }); 
     } 
    });   
} 

E il JSON, che ho convalidato.

 
{ 
    "items": [ 
      [ 
       { 
        "href": "/edinburgh/video/news-090415-s2-squalor-edinburgh/", 
        "thumbimg": "http://brightcove.vo.llnwd.net/d7/unsecured/media/1486976045/1486976045_19721015001_asset-1239819553334.jpg?pubId=1486976045", 
        "titletext": "Cannabis plants found in house with neglected children", 
        "paratext": "A court has heard four young children lived in", 
        "cname": "" 
       }, 
       { 
        "href": "/edinburgh/video/news-090414-s2-waverley-station-edinburgh/", 
        "thumbimg": "http://brightcove.vo.llnwd.net/d7/unsecured/media/1486976045/1486976045_19537855001_asset-1239732920496.jpg?pubId=1486976045", 
        "titletext": "Multi-million pound revamp for Waverley Station", 
        "paratext": "Edinburgh's Waverley Station is set for a", 
        "cname": "" 
       }, 
       { 
        "href": "/edinburgh/video/news-s2-natal-20090408/", 
        "thumbimg":"http://brightcove.vo.llnwd.net/d7/unsecured/media/1486976045/1486976045_18948154001_asset-1239206353135.jpg?pubId=1486976045", 
        "titletext": "Stillbirth charity on the road to raise awareness", 
        "paratext": "SANDS Lothian are hoping to highlight their", 
        "cname": "" 
       }, 
       { 
        "href": "/edinburgh/video/news-090407-l2-rbs/", 
        "thumbimg":"http://brightcove.vo.llnwd.net/d7/unsecured/media/1486976045/1486976045_18827378001_asset-1239110600777.jpg?pubId=1486976045", 
        "titletext": "Thousands of jobs to go at Royal Bank of Scotland", 
        "paratext": "Edinburgh-based bank to cut 4,500 positions in the", 
        "cname": "" 
       }, 
       { 
        "href": "/edinburgh/video/news-090415-s2-squalor-edinburgh/", 
        "thumbimg": "http://brightcove.vo.llnwd.net/d7/unsecured/media/1486976045/1486976045_19721015001_asset-1239819553334.jpg?pubId=1486976045", 
        "titletext": "1", 
        "paratext": "A court has heard four young children lived in", 
        "cname": "lastlineup" 
       }    
      ], 

      [ 
       { 
        "href": "/edinburgh/video/news-090415-s2-squalor-edinburgh/", 
        "thumbimg": "http://brightcove.vo.llnwd.net/d7/unsecured/media/1486976045/1486976045_19721015001_asset-1239819553334.jpg?pubId=1486976045", 
        "titletext": "1", 
        "paratext": "A court has heard four young children lived in", 
        "cname": "" 
       }, 
       { 
        "href": "/edinburgh/video/news-090414-s2-waverley-station-edinburgh/", 
        "thumbimg": "http://brightcove.vo.llnwd.net/d7/unsecured/media/1486976045/1486976045_19537855001_asset-1239732920496.jpg?pubId=1486976045", 
        "titletext": "2", 
        "paratext": "Edinburgh's Waverley Station is set for a", 
        "cname": "" 
       }, 
       { 
        "href": "/edinburgh/video/news-s2-natal-20090408/", 
        "thumbimg":"http://brightcove.vo.llnwd.net/d7/unsecured/media/1486976045/1486976045_18948154001_asset-1239206353135.jpg?pubId=1486976045", 
        "titletext": "Stillbirth charity on the road to raise awareness", 
        "paratext": "3", 
        "cname": "" 
       }, 
       { 
        "href": "/edinburgh/video/news-090407-l2-rbs/", 
        "thumbimg":"http://brightcove.vo.llnwd.net/d7/unsecured/media/1486976045/1486976045_18827378001_asset-1239110600777.jpg?pubId=1486976045", 
        "titletext": "Thousands of jobs to go at Royal Bank of Scotland", 
        "paratext": "4", 
        "cname": "" 
       }, 
       { 
        "href": "/edinburgh/video/news-090407-l2-rbs/", 
        "thumbimg":"http://brightcove.vo.llnwd.net/d7/unsecured/media/1486976045/1486976045_18827378001_asset-1239110600777.jpg?pubId=1486976045", 
        "titletext": "Thousands of jobs to go at Royal Bank of Scotland", 
        "paratext": "Edinburgh-based bank to cut 4,500 positions in the", 
        "cname": "lastlineup" 
       }    

      ] 

     ] 
} 

{ 
    "items": [ 
      [ 
       { 
        "href": "/edinburgh/video/news-090415-s2-squalor-edinburgh/", 
        "thumbimg": "http://brightcove.vo.llnwd.net/d7/unsecured/media/1486976045/1486976045_19721015001_asset-1239819553334.jpg?pubId=1486976045", 
        "titletext": "Cannabis plants found in house with neglected children", 
        "paratext": "A court has heard four young children lived in", 
        "cname": "" 
       }, 
       { 
        "href": "/edinburgh/video/news-090414-s2-waverley-station-edinburgh/", 
        "thumbimg": "http://brightcove.vo.llnwd.net/d7/unsecured/media/1486976045/1486976045_19537855001_asset-1239732920496.jpg?pubId=1486976045", 
        "titletext": "Multi-million pound revamp for Waverley Station", 
        "paratext": "Edinburgh's Waverley Station is set for a", 
        "cname": "" 
       }, 
       { 
        "href": "/edinburgh/video/news-s2-natal-20090408/", 
        "thumbimg":"http://brightcove.vo.llnwd.net/d7/unsecured/media/1486976045/1486976045_18948154001_asset-1239206353135.jpg?pubId=1486976045", 
        "titletext": "Stillbirth charity on the road to raise awareness", 
        "paratext": "SANDS Lothian are hoping to highlight their", 
        "cname": "" 
       }, 
       { 
        "href": "/edinburgh/video/news-090407-l2-rbs/", 
        "thumbimg":"http://brightcove.vo.llnwd.net/d7/unsecured/media/1486976045/1486976045_18827378001_asset-1239110600777.jpg?pubId=1486976045", 
        "titletext": "Thousands of jobs to go at Royal Bank of Scotland", 
        "paratext": "Edinburgh-based bank to cut 4,500 positions in the", 
        "cname": "" 
       }, 
       { 
        "href": "/edinburgh/video/news-090415-s2-squalor-edinburgh/", 
        "thumbimg": "http://brightcove.vo.llnwd.net/d7/unsecured/media/1486976045/1486976045_19721015001_asset-1239819553334.jpg?pubId=1486976045", 
        "titletext": "1", 
        "paratext": "A court has heard four young children lived in", 
        "cname": "lastlineup" 
       }    
      ], 

      [ 
       { 
        "href": "/edinburgh/video/news-090415-s2-squalor-edinburgh/", 
        "thumbimg": "http://brightcove.vo.llnwd.net/d7/unsecured/media/1486976045/1486976045_19721015001_asset-1239819553334.jpg?pubId=1486976045", 
        "titletext": "1", 
        "paratext": "A court has heard four young children lived in", 
        "cname": "" 
       }, 
       { 
        "href": "/edinburgh/video/news-090414-s2-waverley-station-edinburgh/", 
        "thumbimg": "http://brightcove.vo.llnwd.net/d7/unsecured/media/1486976045/1486976045_19537855001_asset-1239732920496.jpg?pubId=1486976045", 
        "titletext": "2", 
        "paratext": "Edinburgh's Waverley Station is set for a", 
        "cname": "" 
       }, 
       { 
        "href": "/edinburgh/video/news-s2-natal-20090408/", 
        "thumbimg":"http://brightcove.vo.llnwd.net/d7/unsecured/media/1486976045/1486976045_18948154001_asset-1239206353135.jpg?pubId=1486976045", 
        "titletext": "Stillbirth charity on the road to raise awareness", 
        "paratext": "3", 
        "cname": "" 
       }, 
       { 
        "href": "/edinburgh/video/news-090407-l2-rbs/", 
        "thumbimg":"http://brightcove.vo.llnwd.net/d7/unsecured/media/1486976045/1486976045_18827378001_asset-1239110600777.jpg?pubId=1486976045", 
        "titletext": "Thousands of jobs to go at Royal Bank of Scotland", 
        "paratext": "4", 
        "cname": "" 
       }, 
       { 
        "href": "/edinburgh/video/news-090407-l2-rbs/", 
        "thumbimg":"http://brightcove.vo.llnwd.net/d7/unsecured/media/1486976045/1486976045_18827378001_asset-1239110600777.jpg?pubId=1486976045", 
        "titletext": "Thousands of jobs to go at Royal Bank of Scotland", 
        "paratext": "Edinburgh-based bank to cut 4,500 positions in the", 
        "cname": "lastlineup" 
       }    

      ] 

     ] 
} 

risposta

11

Non restituisce la funzione di richiamata, quindi non può essere valutata.

Si dovrebbe avere qualcosa di simile nel codice PHP:

echo $_GET['callback'] . '(' . $jsonData . ');'; 

Hah, oh scusate, se si sta utilizzando PHP, che sarebbe il caso.

Lo si desidera nel file javascript e sarà necessario specificare un callback con hardcoded perché è un elenco statico.

See: http://www.ibm.com/developerworks/library/wa-aj-jsonp1/

12

altCognito è corretto. Ecco un esempio di lavoro:

mettere questo nella parte superiore della pagina che si sta chiamando, nel

$.getJSON("http://www.yourotherdomain.com/testcross.php?jsoncallback=?", 
    function(data){ 
     $('body').html(data.name).css("color","green"); 
    }); 

e il php che sarebbe tornato roba:

$data = '{"name" : "hello world"}'; 
    echo $_GET['jsoncallback'] . '(' . $data . ');'; 
Problemi correlati