Кодирование JSONP <script src = Запрос - PullRequest
2 голосов
/ 20 декабря 2011

Я пытаюсь получить доступ к Google Книгам, чтобы получить ISBN-код для получения сведений о книге. У меня есть ряд проблем:

A) Я пытаюсь собрать запрос сценария, например:с кодом ISBN, объединенным в URL.Мне не удалось сделать это успешно - и я не знаю почему.

B) Затем я хочу динамически обновить div в DOM с помощью этого сгенерированного сценария, чтобы он затем выполнялся.

C) Я нахожу небольшую загадку относительно формата возвращаемых данных и имени аргумента вызова функции, содержащегося в ответе Google.

Кто-нибудь еще сталкивался с такой же проблемой?и может предложить руководство относительно кода выше.

Я прилагаю код JavaScript ниже.

        $(document).ready(function() {

            $('#viewbook-button').live('click', function() {
              isbnCode = this.text;

              alert("ISBN is : " + isbnCode + " " + this.text + " as well");

              alert("Getting JSONP Google Books data");

              isbnCode = "0451526538";

              JSONPstr = '<' + 'script ' + 'src="' + 'https://www.googleapis.com/books/v1/volumes?q=ISBN' + isbnCode; 
              JSONPstr = JSONPstr + '&callback=handleJSONPResponse">' + '</script>';

              alert("un-Escaped JSONP string" + JSONPstr);

              escJSONPstr = escape( escJSONPstr );

              alert("Escaped JSONP string");

              //divstr = "";
              //divstr = divstr + escape(<script src=");
              //divstr = divstr + encodeURIComponent(https://www.googleapis.com/books/v1/volumes?q=ISBN); 
              //divstr = divstr + escape(isbnCode);
              //divstr = divstr + encodeURIComponent(&callback=handleJSONPResponse);
              //divstr = divstr + escape("></);
              //divstr = divstr + escape(script);
              //divstr = divstr + escape(>);


              $('#jsonp-call').html(escJSONPstr);

              // This will cause the handleJSONPResponse function to execute when the script is dynamically loadedinto div.
              // The data wrapped in a function call will be returned from the Google Books server.
              // This will cause the handleJSONPResponse function to execute below.

            });   // end viewbook-button
        });       // end document.ready

        function handleJSONPResponse(response) {
          var tmp = response;
          alert(tmp);

        };

  </script>


  </head>

  <body> 
    <h2>Show Details of Books Ordered by a Customer</h2>
    <a href="#" id="getcusts-button">Get Customer Details</a>
    <br/><br/>
    <div id="tablist">Tables will be Listed Here</div>
    <br/><br/>
    <div id="Google-call">The JSONP generated src= statement will go here and execute</div>

  </body>
</html>

РЕДАКТИРОВАТЬ:

Проблема решена - спасибо всем.

1 Ответ

2 голосов
/ 20 декабря 2011

Вы заново изобретаете колесо: в jQuery есть встроенная поддержка JSONP, поэтому вам не нужно искать его самостоятельно. Используйте метод $.ajax:

$.ajax({
    url: 'https://www.googleapis.com/books/v1/volumes?q=ISBN' + isbnCode,
    dataType: 'jsonp',
    success: function(response) {
        console.log(response);  // log the response object to the console
    }
});

Это должно быть все, что вам нужно сделать.

...