Как преодолеть ограничение размера ответа Ajax? - PullRequest
0 голосов
/ 23 сентября 2010

Здесь я использовал ajax, в котором когда ajax дает ответ в то время, он автоматически обрезает текст после некоторых символов (6140 символов), так ли это предел ответа ajax? Если так, то как я могу решить это?

Если строка, которую я передаю в JavaScript из jsp, слишком велика, JavaScript не получает все данные. Кажется, что магическое число составляет 6140 символов, все, что ниже, работает нормально, что-нибудь выше, и если я сообщу ajax.response, я вижу, что строка обрезана. Любые идеи, где это ограничение определяется?

Я использовал чистый ajax и узнал от www.w3school.com, точно так же, как я использовал ajax и получал ответ в теге XML.

Мой код:

var XmlHttpRd = false;
function CreateXmlHttpRd()
{
    try
    {
        XmlHttpRd = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch(e)
    {
        try
        {
            XmlHttpRd = new ActiveXObject("Microsoft.XMLHTTP");
        } 
        catch(oc)
        {
            XmlHttpRd = new XMLHttpRequest();//for browser mozila, opera, firefox.
        }
    }
}

function getAllChat()
{   
    var requestUrl = "remotePage.jsp?r="+Math.random();
    //alert(requestUrl);
    CreateXmlHttpRd();
    if(XmlHttpRd)
    {   
        XmlHttpRd.onreadystatechange = HandleResponse;
        XmlHttpRd.open('GET', requestUrl,  true);
        XmlHttpRd.send(null);       
    }
}

function RefreshStatus()
{
    if(refStatus)
        getAllChat();
}

function HandleResponse()
{
    //alert(XmlHttpRd.readyState);
    //alert(XmlHttpRd.status);
    if(XmlHttpRd.readyState == 4 && XmlHttpRd.status == 200)
    {
        //alert(XmlHttpRd.responseText); // here i uncomment alert then respnse text seen cutofff
        var XmlRoot = XmlHttpRd.responseXML.documentElement;

                //// Some Code here to get data//////////
        }
}

1 Ответ

1 голос
/ 24 сентября 2010

Вы уверены, что ответ обрезан и что не только браузер не отображает весь текст в диалоговом окне предупреждения? У меня есть несколько запросов Ajax, которые возвращают очень длинные следы исключений, которые отображаются в диалоговом окне предупреждения, и они обычно где-то отключаются браузером. Вероятно, это сделано для того, чтобы страница не открывала диалоговое окно с предупреждением, которое было бы слишком большим для экрана.

Если вы хотите получить полный текст, вы можете добавить <textarea id="debug"></textarea> на свою страницу и использовать document.getElementById('debug').value = XmlHttpRd.responseText, чтобы получить полный ответ.

Я бы порекомендовал вам не использовать глобальный объект XMLHttpRequest, поскольку он может быть перезаписан при запуске второго запроса. Затем обработчики onreadystatechange обоих запросов могут быть выполнены и обработать второй запрос дважды. Вы можете сделать это так:

function doRequest() {
    var request = new XMLHttpRequest();
    request.onreadystatechange = function() {
        if (request.readyState == 4) {
            if (request.status == 200) {
                // process response
            }
        }
    }
    request.open(...);
    request.send(...);
}

В этом коде каждый обработчик будет обращаться к объекту запроса, который был определен в функции при запуске запроса, и не может обработать неправильный запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...