2010-07-15 20 views
1

我正在写一个动态的js,应该发送一个请求的行动,这是一个链接中的href属性中定义。jQuery的 - jsonp覆盖回调获取参数

链接看起来像:

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

正如你所看到的链接有一个名为回调GET PARAM。这是定义的,因为请求方法应该尽可能通用,并且元素本身应该知道它与响应的关系。

现在我送与jQuery AJAX功能要求的动作,看起来就像是:

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

工作得非常好,在原则。但我的问题是,jquery定义了自己的回调获取参数,我不知道,我怎么能告诉方法,在我的链接href中的回调参数是正确的,请求 - uri看起来像这样:

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

的唯一出路,我明白了,是定义我自己的回调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'); 
    }); 
}); 

内因为发送方法应该是通用的,并会在我们的整个侧处,响应已被处理用不同的方法以许多不同的方式。

希望我能够充分描述我的问题,并会很乐意提供任何帮助。

+0

'callback'不仅仅是客户端。服务器在应该命名回调参数时有相同的说法。例如,YQL需要一个名为“_callback”的参数。如果你不在服务器端控制这个参数,那么就让url包含参数名称作为它的属性的一部分。 ''。没有比这更通用。如果没有指定,则回退到默认键'“回调”'。 – Anurag 2010-07-16 02:41:03

+0

此外,您不能发送两个'回调参数,并期望所有服务器行为相同。有些人可能会拿起第一个,其他人可能会拿起第二个。例如,YQL再次使用第一个'callback'参数,如果有多个。所以这不是关于冗余,而是关于意外行为。 – Anurag 2010-07-16 02:47:33

回答

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; 
    }); 
}); 
+0

是的。想到了这一点,但希望我可以避免解析。 – snirgel 2010-07-15 14:02:13

+0

谢谢。将尝试... – snirgel 2010-07-15 14:08:54

0
+0

是的,我做了,但我不想插入一个额外的库。以为我可以自己解决问题。我尝试了Gaby的解决方案,并解析了href的回调参数。效果很好... – snirgel 2010-07-16 11:47:30

+0

很高兴你找到了一个出路:) – 2010-07-16 21:15:05