Хобрук: Ваш путь к мастерству в программировании

Проблема с вызовом функции JSONP

я настроил веб-сервис, который является междоменным, и с ним нужно связаться через json с дополнением в простой кодовой строке jquery, подобной этой, я успешно получаю данные json.

$.getJSON("http://server/series/hist?jsonp=?", function(data){
 console.log(data);
});

веб-служба будет оборачивать результат в функцию всякий раз, когда в URL-адресе существует «jsonp». для этих случаев я использовал имя функции по умолчанию, например:

myfunction({"a":1})

jquery помогает мне здесь и пытается вызвать несуществующую функцию ("myfunction()"). вместо этого я пытаюсь добиться простого вызова функции обратного вызова (см. Выше) для локальной обработки данных.

Можете ли вы указать мне в правильном направлении?

благодарю вас

08.03.2012

Ответы:


1

Я не совсем уверен, в чем ваша проблема на самом деле, но:

Интерпретация 1

Предполагая, что под «локально» вы подразумеваете «без использования обратного вызова»:

Это невозможно. JSON-P не может работать синхронно, поскольку зависит от добавления элемента <script> (который не будет обработан, пока текущая функция не завершит выполнение).

Интерпретация 2

Предполагая, что под that isnt existing ("myfunction()") вы подразумеваете «Ваш веб-сервис всегда использует имя функции myfunction:

Исправьте веб-сервис. jsonp=? означает "Случайно сгенерировать имя функции и передать его как параметр jsonp.

Веб-служба должна использовать этот параметр для определения используемого имени функции, а не использовать фиксированное значение, такое как myfunction.

Интерпретация 3

Вы не хотите использовать JSON-P в качестве входных данных, а хотите напрямую вызывать свою анонимную функцию.

Вы не можете. Он не хранится нигде, где вы можете получить к нему доступ. Вы должны переписать свой код, чтобы он не передавался напрямую в getJSON:

function myFunction(data){
  console.log(data);
}

$.getJSON("http://server/series/hist?jsonp=?", myfunction); 
myfunction({"a":1})
08.03.2012
  • хорошо, локально я имел в виду функцию обратного вызова моего кода выше: function(data){ console.log(data);} поскольку она упоминается в каждом примере JSON 08.03.2012
  • Я только что прочитал ваше редактирование Interpretation2. если я правильно понял, jquery случайным образом генерирует имя для ?. поэтому веб-служба должна поймать это и обернуть результат json, чтобы заставить функцию обратного вызова работать? 08.03.2012
  • @zbug — Да. Вы не можете использовать одно и то же имя каждый раз, вы получите конфликты. 08.03.2012
  • Ок, прекрасно. я мог понять это. веб-сервис не принимал никаких значений GET, содержащих _ в строке. jquery, с другой стороны, делает это. теперь моя внутренняя функция обратного вызова работает нормально. ваша помощь приветствуется 08.03.2012
  • Новые материалы

    Еженедельный выпуск React 75
    Добро пожаловать в 75-й выпуск React Weekly, еженедельный обзор последних ссылок и руководств по React и React Native. Посетите Купить кофе , чтобы найти способы поддержать React Weekly, или..

    (Почти) полнофункциональная реализация Gumbel MuZero в Джулии.
    TLDR; Gumbel Muzero — это современный алгоритм обучения с подкреплением. Он достиг сверхчеловеческой производительности во многих настольных играх и даже, что более впечатляюще, в Atari..

    Передача нейронного стиля в браузерах с использованием Angular и WebDNN
    В последние годы глубокое обучение привлекло большое внимание из-за его безупречной производительности при обучении на обширных данных и высокой точности при выводе. Развертывание этих алгоритмов..

    Шифр Цезаря в C
    Шифр Цезаря  — один из самых простых и широко известных методов шифрования. Он включает в себя сдвиг каждой буквы в сообщении на определенное количество позиций в алфавите. В этой статье мы..

    Исследовательский анализ данных (EDA)
    Что такое ЭДА? Анализ данных, который ищет закономерности в данных, известен как исследовательский анализ данных. Это похоже на беглый просмотр данных, чтобы найти наиболее важные..

    1x1 Convolution: демистификация
    Чтобы пролить свет на концепцию операции свертки 1x1, которая представлена ​​в статье «Сеть в сети» Лин и др. и Google Inception Некоторое время назад я прочитал статью «Сеть в сети» (NiN),..

    Лучшие расширения VS Code в 2022 году
    Код ВС Лучшие расширения VS Code в 2022 году Список самых полезных расширений VS Code, которые вы можете использовать как разработчик в 2022 году Расширения находятся на рынке VS Code,..