2010-07-27 78 views
4

我注意到一些网站(例如:apple.com或disqus.com)不会发送AJAX请求来加载,例如实时搜索结果。相反,他们附加了新的JS脚本,它将所有结果保存在一个变量中。嵌入内联JS脚本而不是发出AJAX请求。为什么?

更具体一点。如果你去apple.com并在搜索器中输入“test”。它不会发送AJAX请求来获取结果,而是会向HTML添加< script src =“some.addres.apple.com/result.js?q=test”>并执行新的JS脚本引入搜索结果。 改进 他们这样做是因为您无法将AJAX请求发送到不同的域,或者有没有可能提高速度?

回答

1

有很多的讨论,网上的JSONP的 “hackishness” 的:

我发现它是非常有用的解决跨域安全限制,但我没有见过,也没有听说过任何速度改进。

我强烈建议学习更多关于JSONP的知识(特别是当它有用/必要时)。

+0

Thx非常适合你(和大家的帮助)。想了解一段时间:) – TheDude01 2010-07-29 08:07:06

0

我认为,这由周围的请求必须指向从中加载页面的同一台服务器,浏览器所施加的限制工作的一种手段。

1

这种方法称为jsonp。而不是调用ajax请求脚本附加新的脚本标记,其中包含包装到回调函数中的数据(例如,针对ajax调用的onComplete回调)。它有助于您需要向其他域请求的情况。否则(在我看来)阿贾克斯调用更可取,例如它有适当的error,success和超时回调。

more about Jsonp

1

之一JSONP技术的主要优点是,由于现在你的搜索功能正在从不同的服务器提供服务,你已经取得了进展,并采取痛苦制定JSONP响应机制,你可以继续前进,嵌入该搜索你想要的地方。

因此,在你特定的例子,苹果公司可以使用相同的搜索(如果它封装了其他生态系统,以及)到也许提供结果,例如在另一个妹妹网站。

在性能方面,正如@fantactuka指出,根据我Ajax调用preferrable也为脚本注入昂贵,并有少东西时出现错误处理方式。