Jquery - изменить параметры обратного вызова jsonp

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

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

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

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

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

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

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

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

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

<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.

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

+1
источник поделиться
2 ответа

Вы должны использовать версию jQuery.ajax, но не hardcode имя обратного вызова. Вместо этого проанализируйте атрибут 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;
    });
});
0
источник

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

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос