Javascript/jQuery ajax帮助需要

问题描述:

我在这里有点困惑,也许有人可以帮助。Javascript/jQuery ajax帮助需要

1)Javascript ajax请求问题:我可以使用XMLHttpRequest直接向任何其他网站发出请求 - 不是始发服务器吗?

2)JQuery ajax请求问题:我可以使用$ .ajax直接向任何其他网站发出请求 - 不是始发服务器吗?

浏览网页时,我发现了一些有关XSS(跨站点脚本)可能被禁止的东西,并且解决方法是使用服务器脚本语言和webservice ...但不管我怎么想都不关心。

如果有人能回答,请帮忙!

+0

你的后端是什么? – kobe 2011-05-04 04:33:12

这个question讨论了同样的问题。您必须在服务器端获取其他站点的内容

您不能跨站点ajax请求。当您使用jquery $ .ajax从不同的域中获取数据时,jquery在后台获取url并在文档头中追加一个include。

你是对的,由于安全原因,这是被禁止的。

jQuery的.ajax()是一种在一个函数中使用JavaScript的XMLHttpRequest的简单方法。最后,它只是XMLHttpRequest

跨站点脚本(XSS)可防止所有跨域请求,但是,您可以使用服务器端解决方案来克服它。

但是接下来是JSONP,其中确实是让JavaScript做跨站请求,但只限于有限的数据集。

+0

JSONP允许跨站点请求。 JSON本身就是一种数据格式,就像XML一样。 – icktoofay 2011-05-04 04:30:13

+0

感谢您的澄清。这就是我从来没有使用它... – Blender 2011-05-04 04:31:26

我相信这里有一些术语混淆。这与XSS无关。您无法通过不同域名获得javascript信息的原因(即使是在相同域名上的http与https)也是由于相同原产地策略的原因,该策略的存在是为了防止信任站点上的会话与不信任的站点混淆,直接干预(例如通过选择访问不同的域)。 XSS是一个完全不同的概念,它涉及将脚本输入到页面以及用户的恶意目的。

至于访问跨域所有希望不会丢失。 XMLHttpRequest与.ajax()无关紧要,但jsonp允许跨域交换信息。由于也引入了HTML5,postMessage(),它允许跨域通信(并且脚本不会少于!)

是的,使用JSONP是可能的。使用这样的:

$.ajax({ 
    url: 'remote_url', 
    type: 'post', 
    dataType: 'jsonp', //This does the trick 
    success: function(remoteData){ 
     //Use remoteData here. Note it's already json parsed, so it's a javascript object 
    } 
}); 

希望这有助于

+1

jsonp请求不被解析为json,返回实际上是任意的javascript,并且由浏览器在脚本标记中进行评估。通常情况下,jsonp用于获取已知的返回有效的json对象,以便您的回调将处理该解析并执行所需的操作。然而,假设jsonp请求返回一个json对象,或者甚至将json的返回解析为不正确的。 – ryanmarc 2011-05-05 14:37:27

最后你可以跨域AJAX,如果您呼叫服务器已经实现CORS,并允许您的域名叫它

1) Javascript的ajax请求问题:我可以使用XMLHttpRequest直接向任何其他网站发出请求 - 而不是始发服务器?

不,您尝试连接的域中的服务器必须接受cross-domain AJAX;否则,访问这些数据的唯一方法是在服务器上使用一个页面,该页面将请求的数据代理给访问者。

2)JQuery ajax请求问题:我可以使用$ .ajax直接向任何其他网站发出请求 - 不是始发服务器吗?

jQuery AJAX技术实际上是原生XMLHttpRequest的一个包装,所以如果正常的XMLHttpRequest起作用,jQuery也应该如此。