JQuery - JSONP перезаписать обратный вызов получить параметр - PullRequest
1 голос
/ 15 июля 2010

Я пишу динамический JS, который должен отправить запрос к действию, который определен в атрибуте href в ссылке.

Ссылка выглядит так:

  <a href="module/action?callback=MyCallback">show something</a>

Как видите, ссылка имеет параметр getback с именем callback.Это определено, потому что метод запроса должен быть настолько универсальным, насколько это возможно, и элемент должен знать сам, что он должен делать с ответом.

Теперь я отправляю запрос с функцией jquery ajax в действие,выглядит так:

jQuery('#mylink').live("click", function() {
    jQuery.ajax({
      type: 'GET',
      dataType:"jsonp",
      error: ErrorHandler.catchXhrError,
      url: jQuery('#mylink').attr('href');
    });
});

Это работает очень хорошо, в принципе.Но моя проблема в том, что jquery определяет свой собственный параметр обратного вызова get, и я не знаю, как я могу сказать этому методу, что параметр обратного вызова в моих ссылках href является правильным, а request-uri выглядит так:

  http:/example.com/module/action?callback=MyCallback&callback=jsonp1279196981233

Единственный выход, который я вижу, - это определить свой собственный callback-параметр с именем mycallback и интерпретировать mycallback в действии вместо callback:

<a href="module/action?callback=MyCallback">show something</a>

Но мне не нравитсяЭто решение, потому что мой запрос URI имеет параметр, который не будет использоваться:

  http:/example.com/module/action?mycallback=MyCallback&callback=jsonp1279196981233

Пожалуйста, обратите внимание, что я не мог определить имя метода обратного вызова внутри метода ajax

jQuery('#mylink').live("click", function() {
    jQuery.ajax({
      type: 'GET',
      dataType:"jsonp",
      jsonpCallback: 'MyCallback',
      error: ErrorHandler.catchXhrError,
      url: jQuery('#mylink').attr('href');
    });
});

потому что метод отправки должен быть общим и использоваться по всей нашей стороне, а ответ должен обрабатываться различными способами с помощью различных методов js.

Надеюсь, я смог бы достаточно описать свою проблему и был бы радо любой помощи.

Ответы [ 2 ]

0 голосов
/ 16 июля 2010

Вы смотрели в http://code.google.com/p/jquery-jsonp/?

0 голосов
/ 15 июля 2010

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

а вот разбор ..

jQuery('#mylink').live("click", function() {
    var href = jQuery('#mylink').attr('href');

    jQuery.ajax({
      type: 'GET',
      dataType:"jsonp",
      jsonpCallback: href.match(/([?&]callback[a-zA-Z0-9=]+)/)[0].split('=')[1],
      error: ErrorHandler.catchXhrError,
      url: href;
    });
});
...