嵌入内联JS脚本而不是发出AJAX请求。为什么?

时间:2010-07-27 15:11:54

标签: javascript ajax

我注意到某些网站(例如:apple.com或disqus.com)不会发送加载的AJAX请求,例如,实时搜索结果。相反,他们附加了新的JS脚本,它将所有结果保存在变量中。

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

4 个答案:

答案 0 :(得分:1)

这种方法称为jsonp。而不是调用ajax请求脚本会附加新的脚本标记,其中包含包含在回调函数中的数据(如ajax调用的onComplete回调)。当您需要其他域请求时,它很有用。否则(在我看来)ajax调用是优选的,例如它有适当的errorsuccess和超时回调。

more about Jsonp

答案 1 :(得分:1)

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

我发现它在解决跨域安全限制方面非常有用,但我没有看到,也没有听说过任何速度改进。

我强烈建议您更多地了解JSONP(特别是在有用/必要时)。

答案 2 :(得分:1)

JSONP技术的一个主要优点是,从现在开始,您的搜索功能是从不同的服务器提供的,并且您已经开始努力开发JSONP响应机制,您可以继续进行搜索无论你想要什么。

因此,在您的特定示例中,Apple可以使用相同的搜索(如果它也包含其他生态系统)来提供结果,例如在另一个姊妹网站上。

就性能而言,正如@fantactuka所指出的那样,根据我的说法,AJAX调用也是可取的,因为脚本注入成本很高,并且在出现错误时提供了更少的处理方法。

答案 3 :(得分:0)

我认为这是一种解决浏览器强加的限制的方法,必须将请求定向到加载页面的同一台服务器。