如何克服Ajax响应大小限制?

时间:2010-09-23 07:18:30

标签: ajax

这里我使用了ajax,当ajax在那时给出响应它会在一些字符(6140个字符)之后自动剪切文本,那么它是否限制了ajax响应?如果是这样,那么我该如何解决这个问题?

如果我从jsp传递给JavaScript的字符串太大,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 个答案:

答案 0 :(得分:1)

您确定响应被切断了,并且不仅仅是浏览器没有显示警告对话框中的所有文本吗?我有一些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(...);
}

在此代码中,每个处理程序将访问请求启动时在函数中定义的请求对象,并且无法处理错误的请求。