【问题标题】:jquery - jsonp overwrite callback get parameterjquery - jsonp覆盖回调获取参数
【发布时间】:2011-03-16 10:17:41
【问题描述】:

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

链接如下:

显示一些东西

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

现在我使用 jquery ajax 函数将请求发送到操作,如下所示:

jQuery('#mylink').live("点击", function() { jQuery.ajax({ 类型:'GET', 数据类型:“jsonp”, 错误:ErrorHandler.catchXhrError, url: jQuery('#mylink').attr('href'); }); });

原则上效果很好。但我的问题是,jquery 定义了它自己的回调 get 参数,我不知道如何告诉方法,我的链接 href 中的回调参数是正确的,并且请求 uri 看起来像这样: http://example.com/module/action?callback=MyCallback&callback=jsonp1279196981233

我看到的唯一方法是定义我自己的名为 mycallback 的回调参数并在操作中解释 mycallback 而不是回调:

显示一些东西

但我不喜欢这个解决方案,因为我的请求 uri 有一个不会被使用的参数:

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

请注意,我无法在 ajax 方法中定义回调方法的名称

jQuery('#mylink').live("点击", function() { jQuery.ajax({ 类型:'GET', 数据类型:“jsonp”, jsonpCallback: 'MyCallback', 错误:ErrorHandler.catchXhrError, url: jQuery('#mylink').attr('href'); }); });

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

希望我能充分描述我的问题并乐于提供任何帮助。

【问题讨论】:

  • callback 不仅适用于客户。服务器对回调参数的名称有平等的发言权。例如,YQL 需要一个名为 "_callback" 的参数。如果您不在服务器端控制此参数,则只需让 url 包含参数名称作为其属性的一部分。 <a href="http://example.com" data-callback="theCallback" />。没有比这更通用的了。如果未指定,则回退到默认密钥 "callback"
  • 另外,您不能发送两个callback 参数并期望所有服务器的行为相同。有些人可能会选择第一个,其他人可能会选择第二个。例如,如果有多个参数,YQL 总是使用第一个 callback 参数。所以这不是关于冗余,而是更多关于意外行为。

标签: javascript ajax jquery jsonp


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    【讨论】:

    • 是的,但我不想为此插入额外的库。以为我可以自己解决问题。我尝试了下面 Gaby 的解决方案并从 href 解析回调参数。效果很好...
    • 很高兴你找到了解决办法 :)
    猜你喜欢
    • 1970-01-01
    • 2014-04-03
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 2012-06-25
    • 2013-02-19
    相关资源
    最近更新 更多