Запрос слишком велик для правильной обработки IE
Я использую Websync3
, Javascript API и подписка примерно на 9 разных каналов на одной странице. У Firefox и Chrome нет проблем, но IE9 выдает ошибку об ошибке The request is too large for IE to process properly
,
К сожалению, в интернете мало информации об этом. Так есть ли у кого-нибудь какие-либо подсказки относительно того, как это исправить?
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 + ')');
}
}
});
2 ответа
Эта ошибка возникает, когда WebSync использует протокол JSON-P для передачи. Это в основном только для IE, междоменных сред. Это означает, что websync находится не в том домене, с которого обслуживается ваша веб-страница. Поэтому IE не хочет делать регулярные XHR-запросы по соображениям безопасности.
JSON-P в основном кодирует восходящие данные (ваши 9-канальные подписки) в виде строки в кодировке URL, которая прикрепляется к обычному запросу к серверу. Предполагается, что сервер интерпретирует эту строку в кодировке URL и отправляет ответ в виде блока JavaScript, который выполняется страницей.
Это прекрасно работает, за исключением того, что IE также имеет ограничение общего URL-адреса запроса для HTTP-запроса примерно 2 КБ. Так что, если вы упакуете слишком много в один запрос к WebSync, вы можете превысить это ограничение в 2 Кбайта.
Самым простым решением является либо разделить ваши запросы WebSync на маленькие части (т.е. подписаться только на несколько каналов одновременно в JavaScript), либо подписаться на один "главный канал", а затем запрограммировать событие WebSync BeforeSubscribe, которое отслеживает это. канал и переписывает список каналов подписки.
Я подозреваю, потому что у вас есть ключ в приведенном выше примере с исходным кодом, вы используете WebSync On-Demand? В этом случае единственный способ создать обработчик события BeforeSubscribe - создать прокси-сервер WebSync.
Итак, на данный момент, так как все остальные озадачены этим вопросом, я поставил ловушку PHP
даже не загружать это Javascript
скрипт, если браузер Internet Destroyer
(эээ, я имею в виду Internet Explorer
). Может быть, решение придет в будущем, хотя.