使用 API(带有两个 jQuery 版本和跨域的页面)

Posted

技术标签:

【中文标题】使用 API(带有两个 jQuery 版本和跨域的页面)【英文标题】:Working with API (page w/ two jQuery versions and cross-domain) 【发布时间】:2012-04-27 05:28:05 【问题描述】:

我还不是经验丰富的开发人员,所以如果我听起来太笨拙或不够清晰,请原谅我。我会尽量说清楚。如果您的见解缺少某些信息,请告诉我,我会尽快跟进。

所以,

我工作的公司有两种运行不同 jQuery 版本(1.2 和 1.4)的页面。此外,我们通过一些不同的域运行该站点,例如:company.com、support.company.com、contact.company.com。

company.com 在 jQuery 1.4 中运行(我们只能使用“$”访问 jQuery),另一个在 1.2 中运行(其中 jQuery 是“$j”或“jQuery”)。

我们有一个 API,它可以从产品中检索很多信息,例如价格、图片、描述等。我们可以在 jQuery 1.4 版本的页面上调用这个 API。其他域我们无法通过此 API 获取任何信息。

我们只能在这里处理 javascript 和 jquery 代码以使其工作。我们无权访问后端。

所以我的问题是:我应该采用什么方法来使 API 在页面上的两种环境中都能正常工作?我可以覆盖最旧的版本吗?这是一个跨域问题吗?我在这里寻找什么思路来解决这个问题?

我真的希望我很清楚。如果没有,请告诉我,我会尽力澄清。 :)

提前致谢!

【问题讨论】:

一种方法是对两者都使用最新的 jQuery(1.2?真的吗?恐龙在 1.2 期间仍然在地球上漫游!)。这样,您就不必处理两个单独的版本(和两个单独的命名空间) 嘿约瑟夫!感谢您的回答。 :) 我们已经尝试过进行这种更改,但是高级管理人员不想......真的不知道为什么......页面加载时是否可以通过javascript或jquery覆盖版本?跨度> 【参考方案1】:

据我所知,jQuery 在加载两次时会覆盖自身,因为它们都使用相同的 $ 变量。 there is a way to make one go around 并被分配到另一个命名空间,而另一个保持原样。

我认为 jQuery 确实与旧 API 有一些向后兼容性。只需尝试检查您网站的 API 以验证这些方法是否仍然存在。最近有些方法已被弃用。否则,您只需要使用最新的 jQuery 重新构建您的 API。但这不应该那么难,基本方法没有太大变化。您甚至可以使用最新方法(1.4 之前尚不存在的方法)提高性能

并告诉高级管理层,他们应该考虑比创建两个 API 更好的策略。不将 API 规划为可维护和可扩展的影响开始显现。

【讨论】:

【参考方案2】:

试试:

<!-- load and register jQuery 1.2 -->
<script src='jquery-1.2.js'></script>
<script>
    var jq12 = jQuery.noConflict();
</script>

<!-- load and register jQuery 1.4 -->
<script src='jquery-1.4.js'></script>
<script>
    var jq14 = jQuery.noConflict();
</script>

当您需要使用 jq12jq14 而不是 $jQuery 的 jQuery 调用时。

jq12('element').click(function() 
    // Do things
)

jq14('element').click(function() 
    // Do things
)

【讨论】:

以上是关于使用 API(带有两个 jQuery 版本和跨域的页面)的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 跨域 POST 恶作剧

jquery.form 和跨域请求

如何访问托管在其他域的 Rest API 数据。跨域问题

jQuery 和跨域 POST 请求

同源和跨域

能跨域和跨浏览器的flashcookie for jquery插件