2015-08-01 24 views
5

Zajmuję się tworzeniem strony internetowej i chcę dodać dane strukturalne do szczegółowych stron. Problem polega na tym, że muszę poprosić o dane, zanim będę wiedział, co dodać do skryptu JSON-LD.Jak dodać dane strukturalne przy użyciu JSON-LD na stronach dynamicznych, które muszą czekać na załadowanie zawartości?

Używam Parse jako zaplecza. Próbowałem również rozejrzeć się za tutorialami, jak to osiągnąć, ale nie można dynamicznie dodawać JSON-LD.

Mam nadzieję, że ktoś mi w tym pomoże! :)

EDIT:

Odpowiedź z danymi muszę umieścić w JSON-LD przychodzi po DOM jest gotowy. Jaki jest wzór w takich sytuacjach?

Mam listę przedmiotów i po kliknięciu na jedną z nich muszę otworzyć stronę szczegółów, którą muszę najpierw załadować, ale po załadowaniu zawartości chcę udostępnić dane strukturalne za pośrednictwem JSON-LD.

Jestem na początku i ciężko mi to rozwiązuje.

EDIT 2:

To moja faktyczna realizacja:

W HTML:

<body> 
    // my html page code 
    ... 
    <script type="text/javascript"> 
     loadDetailPageContent(); 
    </script> 
</body> 

W JS:

function loadDetailPageContent() { 
    // Calling the method here is too early because I don't have info 
    //writeData(); 
    createDetailPage(); 
} 

function createDetailPage() { 
    var recipe = Parse.Object.extend("Recipe"); 
    var query = new Parse.Query(recipe); 
    query.equalTo("objectId", myId); 
    query.first({ 
     success: function(result) { 
      // Calling the method here would be perfect 
      writeData(); 
     }, 
     error: function(error) { 
      alert("Error: " + error.code + " " + error.message); 
     } 
    }); 
} 

function writeData() { 
    var script = document.createElement('script'); 
    script.type = 'application/ld+json'; 
    script.text = JSON.stringify({ 
     "@context": "http://schema.org", 
     "@type": "Recipe", 
     "name": "My recipe name" 
    }); 
    document.querySelector('head').appendChild(el); 
} 

Jak widać Metoda writeData() jest wywoływana w dwóch miejscach. Jeśli zadzwonię do niego od razu, nie ma problemu, a dzięki narzędziu do testowania danych strukturalnych Google mogę śledzić potrzebne dane strukturalne. Problem polega na tym, że w tym momencie nie mam informacji do tworzenia danych strukturalnych, ponieważ muszę czekać na odpowiedź z Parse.

Kiedy jestem wywołanie metody wywołania zwrotnego w sukces, to narzędzie do testowania nie jest w stanie odzyskać dane już :(

+0

Można utworzyć skrypt, który tworzy JSON-LD dynamicznie, Google danych strukturalnych parser - http://stackoverflow.com/questions/27169085/javascript-inside-ld-json – Mousey

+0

Hej Mousey, dziękuję, znalazłam Odpowiedź, którą podłączyłeś, polega na tym, że muszę poczekać na odpowiedź z żądania przed utworzeniem JSON-LD. Jeśli dodaję kod do pliku js w pliku js, dane strukturalne nie istnieją – AlexBalo

+0

wystarczy użyć 'window.onload' lub' $ (document) .ready() ', aby poczekać, aż DOM będzie gotowy , umieść część tworzącą JSON-LD wewnątrz tego http://stackoverflow.com/questions/799981/document-ready-equivalent-without-jquery – Mousey

Odpowiedz

8

http://jsfiddle.net/c725wcn9/2/embedded

Trzeba będzie sprawdzić DOM, aby sprawdzić to działa. jQuery jest potrzebne.

$(document).ready(function(){ 
    var el = document.createElement('script'); 
    el.type = 'application/ld+json'; 
    el.text = JSON.stringify({ "@context": "http://schema.org", "@type": "Recipe", "name": "My recipe name" }); 

    document.querySelector('head').appendChild(el); 
}); 

Kod zawiera nazwę zmiennej script ale dołączane zmienną el do <head> zamiast. usunięto są także nowa linia characte rs z ciągu JSON, który został sprawdzony pod numerem JSON-LD playground.

+1

Och, ok, świetna Mousey, sprawdzę tę odpowiedź dziś wieczorem, gdy jestem w domu. W przypadku zmiennej el prawdopodobnie skopiowałem i wkleiłem niepoprawnie. Dam wam wkrótce opinię. – AlexBalo

+0

Cześć Mousey, próbowałem z twoim kodem, ale niestety narzędzie Google do testowania danych strukturalnych nie jest w stanie znaleźć mojego wstrzykniętego json. https://developers.google.com/structured-data/testing-tool/. Myślę, że problem wynika z faktu, że muszę poczekać na odpowiedź z mojej prośby o parse przed wstrzyknięciem iw tym momencie strona została już przeskanowana w poszukiwaniu danych strukturalnych. Naprawdę mam problemy ze zrozumieniem, jak to działa. – AlexBalo

+0

@AlexBalo - dlatego musisz sprawdzić DOM, aby uzyskać dynamicznie utworzony kod JSON-LD, możesz go skopiować do testera google, lub utworzyć stronę testową z kodem i przeszukać ją, a następnie sprawdzić, czy pojawi się (zajęło mi 2 dni). Narzędzie Google nie sprawdza kodu dynamicznego, a także narzędzie do sortowania danych strukturalnych. – Mousey