强制请求不同域上的URL

时间:2013-02-05 18:33:13

标签: javascript jquery

当用户点击链接时,我需要向不同域上的页面发出请求,以使会话在该域上保持活动状态。我不关心响应数据(除了可能状态代码,所以我可以确保页面没有下降)。我尝试通过$.ajax发出请求,但同源政策禁止它。

提出请求的最佳方式是什么?

我应该在页面上写一个iframe吗?脚本标签? $.ajax中是否有可以使其有效的选项?

编辑:我还需要知道请求何时通过,以便我之后可以做一些事情(即,我想要一个回调)。


添加dataType: 'jsonp'种类使它工作,除了我不希望它执行网站返回的任何内容,它似乎做了。我正在请求的页面是一个普通的旧HTML页面,但是它会在服务器上触发一些使会话保持活动的东西。

2 个答案:

答案 0 :(得分:1)

您可以使用Image“class”发送请求:

var img = new Image();
img.onerror = img.onload = function() { console.log('Sended') }
img.src = "http://google.com?hey=google&rnd=" + Math.random() // random is used to prevent caching

但除非响应不是图片,否则您将无法获得有关资源可用性的任何信息。

另外,我不确定这个解决方案是否是跨浏览器的。它似乎适用于最近的Opera和Chrome,但我没有在任何其他浏览器中测试它。

顺便说一下,这种图像方法似乎是唯一安全的方法。如果你包含脚本或加载iframe,他们可能会对你的页面做一些不好的事情,而简单的图像则无害。

答案 1 :(得分:0)

这似乎有效:

$('#myelement').on('click',function() {
    $('<iframe>', {src:'http://otherdomain.com/page'}).hide().load(function() {
        $(this).remove(); //clean up the DOM
        // do stuff
    }).appendTo('body');
});