Запрос слишком велик для правильной обработки 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). Может быть, решение придет в будущем, хотя.

Другие вопросы по тегам