2009-04-17 15 views
9

Parece que no puedo hacer que mi archivo JSON funcione cuando lo extraigo de otro dominio usando JQuerys getJSON. He colocado la parte de devolución de llamada al final de la url, pero todavía no tengo alegría. Firebug me dice que es un problema de dominios cruzados, que parece tener sentido como si coloco el archivo JSON localmente el código de abajo (excluyendo el ? Jsoncallback =? funciona bien)Jquery getJSON problemas de dominio cruzado

Aquí está 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; 
       } 
      }); 
     } 
    });   
} 

Y el JSON, que he validado.

 
{ 
    "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" 
       }    

      ] 

     ] 
} 

Respuesta

11

No devuelve la función de devolución de llamada, por lo que no se puede evaluar.

Usted debe tener algo como esto en su código PHP:

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

Ah, oh lo siento, si estuviera utilizando php, que sería el caso.

Lo quiere en su archivo javascript, y en su lugar tendrá que especificar una devolución de llamada codificada porque es una lista estática.

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

12

altCognito es correcta. Aquí está un ejemplo de trabajo:

poner esto en la parte superior de la página desde el que llama, en el

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

y el php que devolvería cosas:

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