crossDomain heartbeat无法使用jquery解析json数据

时间:2011-10-14 18:57:27

标签: jquery json security same-origin-policy heartbeat

我在一个“门户”中嵌入我的模块,一个asp.net项目,门户网站为我的网址生成一个iframe,我知道它是一个狗屎,但我没有成功。
当用户使用我的web项目进行迭代时,为了避免主“门户”端的会话,门户网站所有者告诉我通过javascript从我的应用程序到门户开始心跳。
每个人都知道以这种方式保持会话是不安全的,但是“门户”那时我没有什么可做的 真正的问题是我无法从我的应用程序到门户网站进行跨域请求,因为same origin policy将其锁定,我找到了一个使用jquery的解决方案,但它需要[心跳监听器]处理json。 官方jsonp网站here 有人可以帮帮我吗? 有我的剧本:

function startHeartbeat() 
{
    var interval = 9513575;
    window.setInterval(
         function () {
             $.ajax({
                 type: "GET",
                 cache: false,
                 async: true,
                 crossDomain: true,
                 url: "http://www.theportalurl.com",
                 dataType: 'JSONP',
                 complete:function(jqXHR, textStatus){                    
                     alert("Complete");
                 },
                 success:function(json){                    
                     alert("Success");
                 },
                 error:function(jqXHR, textStatus, errorThrown){
                     alert("Error:" + textStatus + ", detail:" + errorThrown);
                 },
            });

         }
     , interval
     );
}
在@rook给我帮助后,我达到了这个目的:

function startHeartbeat(pgn) 
{
    $("body").append("<img id='heartbeat' style='width:1px; height:1px' name='heartbeat' src='http://www."+Math.random()+".org'/>");
    var interval = 350000;
    window.setInterval(
         function () {
            var rnd = Math.random();
            var url = "https://www.theportal.com/refreshsession.aspx?pgn="+pgn+"&rndv="+rnd;
            $("#heartbeat").attr("src", url);
         }
     , interval
     );
}

1 个答案:

答案 0 :(得分:0)

您要做的是明确违反JavaScript的原始政策。一个好的解决方案是门户网站所有者可以为要使用XHR获取的页面(以及页面)设置此http标头元素。

Access-Control-Allow-Origin: http://foo.example

来源:http access control