2013-06-06 86 views
0

我正在開發一個使用隱藏幀技術從服務器檢索一些數據的網頁。 數據實時更新,並且服務器通知瀏覽器每次修改。隱藏的iframe chrome回調未觸發

該組件在IE和Firefox中均可用,但在Chrome中,服務器檢索到的回調函數未在客戶瀏覽器。 但是我可以看到在開發人員工具中打開的連接,以及通過該連接收到的數據增長。

我讀過一些瀏覽器解析和執行從服務器接收到的數據時可能會遇到問題,但我無法找到這些情況下的解決方案。

也許我需要發送一些http頭到這種情況下,但我什至不知道要搜索什麼。

編輯:代碼示例 這是我用來連接到服務器的功能。它在登錄後被調用。登錄的實現方式與連接步驟相同。

function __sendConnectRequest() 
{ 
    document.getElementById(UID).setAttribute('value', __username); 
    document.getElementById(SID).setAttribute('value', __sessionKey); 
    document.getElementById(PID).setAttribute('value', __privateKey); 
    try 
    { 
     document.getElementById('connectFormId').submit(); 
    } 
    catch (err) 
    { 
     alert("error connecting"); 
     console.log("__sendConnectRequest: " + err.message); 
    }  
} 


var __connectResponseCallback = null; 
function __setConnectResponseCallback(callback) 
{ 
    __connectResponseCallback = callback; 
} 

function __connectResponseHandler(statusCode) 
{ 
    if(__connectResponseCallback) 
    { 
     __connectResponseCallback(statusCode);  
    } 
} 

這是我如何創建我的DOM元素。這些元素被附加到文檔的主體,並且表單有一些輸入字符串。

function getNewIframe(name, id) 
{ 
    //KNOWN BUG IN IE while creating iframes 
    //http://webbugtrack.blogspot.com/2007/10/bug-235-createelement-is-broken-in-ie.html 
    var iframe; 
    try 
    { 
     iframe = document.createElement('<iframe name="' + name + '">'); 
    } 
    catch (ex) 
    { 
     iframe = document.createElement('iframe'); 
     iframe.name = name; 
    } 
    iframe.id = id; 
    iframe.style.display = 'none'; 
    return iframe; 
}  

function getNewForm(name, id, target, action) 
{ 
    var form = document.createElement("form"); 
    form.name = name; 
    form.id = id; 
    form.method = 'post'; 
    form.target = target; 
    form.action = serverUrl+action; 
    form.style.display = 'none'; 
    return form; 
}  
+0

我們可以看到代碼嗎?也許甚至是一個jsFiddle,因爲這真的不清楚 – EaterOfCode

回答

0

該解決方案通過在服務器響應中添加multipart/x-mixed-replace標題解決。這樣,數據以塊的形式執行,瀏覽器不需要等待所有的響應被接收。

它似乎是彗星技術的舊標準。