JQuery: AJAX вызов, чтобы получить JSONP не вызывает функцию - PullRequest
2 голосов
/ 07 февраля 2011

У меня проблемы с запуском моего кода в обратном вызове с использованием вызова ajax из библиотеки jquery. Код выглядит так:

function processJSONDirectoryFile(jsonData) {
        finished = false;
        for (var i = 0; i < jsonData.length; i++) {
                processJSONCountryFile(jsonData[i]);
        }
        finished = true;
}

function getJSON() {
  //snip

  $.ajax({url:      'http://example.org/api/rest/something',
          data:      {},
          dataType: 'jsonp',
          timeout:  10000,
          jsonp: "callback",
          jsonpCallback:  "processJSONDirectoryFile",
          });
  //snip
}

Я проверил, могу ли я загрузить http://example.org/api/rest/something?callback=myfunc, и это работает как положено. Я использую Firebug для установки точек останова в этом коде. Точка останова вызова ajax достигнута, но точка останова внутри processJSONDirectoryFile не достигнута.

Я должен также упомянуть, что я использую jsonp, так как мой код работает в другом домене, отличном от example.org, поэтому мне нужно использовать jsonp, чтобы обойти систему контроля домена.

Я совершаю очевидную ошибку?

Ответы [ 2 ]

5 голосов
/ 07 февраля 2011

Я полагаю, что вы должны снять с кавычки функцию и передать ее по ссылке:

$.ajax({ url: 'http://example.org/api/rest/something',
  // This empty data parameter probably isn't necessary.
  data: {},
  dataType: 'jsonp',
  timeout: 10000,
  jsonp: "callback",
  jsonpCallback: processJSONDirectoryFile,
});

Кроме того, это должно быть эквивалентно, если вы предпочитаете более согласованный синтаксис $.ajax():

$.ajax({
  url: 'http://example.org/api/rest/something?callback=?',
  dataType: 'jsonp',
  timeout: 10000,
  success: processJSONDirectoryFile
});

По соглашению, jQuery вставит свое случайно сгенерированное имя функции обратного вызова для значения ключа callback в строке запроса.Итак, все автоматически «прозрачно» подключено.

0 голосов
/ 13 ноября 2013

попробуйте правильно вызвать вашу функцию:

processJSONDirectoryFile()

...