2012-10-17 24 views
1

我正在使用Websync3,JavaScript API,並在一個頁面上訂閱了大約9個不同的頻道。 Firefox和Chrome沒有任何問題,但是IE9正在拋出一個錯誤提示The request is too large for IE to process properly
不幸的是,互聯網幾乎沒有關於此的信息。那麼有沒有人有任何線索來解決這個問題?請求太大,IE無法正常處理

var client = fm.websync.client; 

    client.initialize({ 
     key: '********-****-****-****-************' 
    }); 

    client.connect({ 
     autoDisconnect: true, 
     onStreamFailure: function(args){ 
      alert("Stream failure"); 
     }, 
     stayConnected: true 
    }); 

    client.subscribe({ 
     channel: '/channel', 
     onSuccess: function(args) { 
      alert("Successfully connected to stream"); 
     }, 

     onFailure: function(args){ 
      alert("Failed to connect to stream"); 
     }, 

     onSubscribersChange: function(args) { 
      var change = args.change; 
      for (var i = 0; i < change.clients.length; i++) { 
       var changeClient = change.clients[i]; 

       // If someone subscribes to the channel 
       if(change.type == 'subscribe') { 

       // If something unsubscribes to the channel 
       }else{ 

       } 
      } 
     }, 

     onReceive: function(args){ 
      text = args.data.text; 
      text = text.split("="); 
      text = text[1]; 
      if(text != "status" && text != "dummytext"){ 
       //receiveUpdates(id, serial_number, args.data.text); 
      var update = eval('(' + args.data.text + ')'); 

    } 
    } 
}); 

回答

3

當WebSync使用JSON-P協議進行傳輸時會發生此錯誤。這主要是針對IE,跨域環境。含義websync與您的網頁所在的域名不同。因此,IE不希望出於安全原因定期進行XHR請求。

JSON-P基本上將上游數據(您的9個頻道訂閱)編碼爲URL編碼字符串,並將其添加到服務器的常規請求中。服務器應該解釋該URL編碼的字符串,並將響應作爲由頁面執行的JavaScript塊發回。

這工作正常,但IE瀏覽器對大約2kb的HTTP請求的整體請求URL也有限制。因此,如果您對WebSync的單個請求打包太多,則可能會超過此2kb上行限制。

最簡單的解決方案是將WebSync請求分成小塊(即:一次只訂閱少量通道),或訂閱一個「主通道」,然後編寫WebSync BeforeSubscribe事件監視該頻道並重新寫入訂閱頻道列表。

我懷疑是因爲您在上面的示例源代碼中存在密鑰,您使用的是WebSync On-Demand?如果是這種情況,則創建BeforeSubscribe事件處理程序的唯一方法是創建WebSync代理。

+1

從WebSync 4開始,JSON-P僅用於IE7及更低版本。 IE8 +中可以使用更新的技術(postMessage,CORS,WebSockets等)。 – Anton

0

所以,就目前而言,因爲其他人都被這個問題難住了,以及,我放個陷阱,我PHP到甚至沒有加載該Javascript腳本如果瀏覽器是Internet Destroyer(呃,我的意思Internet Explorer)。雖然未來可能會有解決方案。