jquery - jsonp覆盖回调get参数

时间:2010-07-15 13:47:56

标签: javascript ajax jquery jsonp

我正在编写一个动态js,它应该向一个动作发送请求,该动作在链接的href属性中定义。

链接看起来像这样:

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

正如您所看到的,链接有一个名为callback的get参数。这是定义的,因为请求方法应该尽可能通用,并且元素应该自己知道它与响应有什么关系。

现在我使用jquery ajax函数向请求发送请求,看起来像这样:

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

原则上这很有效。但我的问题是,jquery定义了自己的回调get param,我不知道,我怎么能告诉方法,我的链接href中的回调参数是正确的,而request-uri看起来像这样: / p>

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

我看到的唯一出路是定义我自己的名为mycallback的callback-param并在动作中解释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');
    });
});

因为send方法应该是通用的,并且将在我们的整个方面使用,并且必须通过不同的js方法以多种不同的方式处理响应。

希望我能充分描述我的问题,并对任何帮助感到高兴。

2 个答案:

答案 0 :(得分:0)

您应该使用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;
    });
});

答案 1 :(得分:0)