0

我正在使用 AJAX 函数将数据传输到 PHP 文件。我传递给 AJAX 函数的数据长度为 17000 个字符。这通常对于使用 GET 方法传输来说太长了,但是人们会认为 POST 方法将允许传递如此大的变量。

这是我正在使用的 AJAX 函数:

function ajaxFunction(id, datatypeString, pathToFileString, variable){

    var myRequestObject = null; 

    document.getElementById(id).innerHTML = "<span>Started...</span>";

    if (window.XMLHttpRequest)
    {
        myRequestObject = new XMLHttpRequest();
    } 
    else if (window.ActiveXObject) 
    {
        try 
        {
            myRequestObject = new ActiveXObject("Msxml2.XMLHTTP");
        } 
        catch (e)
        {
            try 
            {
                myRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
            } 
            catch (e) {}
        }
    }


    myRequestObject.onreadystatechange = function()
    { 
        document.getElementById(id).innerHTML = "<span>Wait server...</span>";
        if(myRequestObject.readyState == 4)
        {
            if(myRequestObject.status == 200)
            {
                // process a document here
                document.getElementById(id).innerHTML = "<span>Processing file...</span>"

                if(datatypeString == "txt"){
                    //Injects code from a text file
                    document.getElementById(id).innerHTML = myRequestObject.responseText;
                }
                else if(datatypeString == "xml"){
                    //Injects code from an XML file
                    document.getElementById(id).innerHTML = myRequestObject.responseXML.documentElement.document.getElementsByTagName('title')[0].childNodes[0].nodeValue;   // Inject the content into the div with the relevant id 
                }
                else{
                    document.getElementById(id).innerHTML = "<span>Datatype exception occured</span>";
                }

            }   
            else    
            {
                document.getElementById(id).innerHTML = "<span>Error: returned status code " + myRequestObject.status + " " + myRequestObject.statusText + "</span>";
            }   
        } 
    }; 

    myRequestObject.open("POST", pathToFileString+variable, true); 
    myRequestObject.send(null); 
}

这是对该 AJAX 函数的函数调用:

ajaxFunction("myDiv", "txt", "processdata.php", "?data="+reallyLargeJavascriptVariable);

这也是我在调用 AJAX 函数时遇到的错误:

Error: returned status code 414 Request-URI Too Large

我在 Stackoverflow 和其他网站上四处寻找解决此问题的方法。然而,大多数答案归结为:“使用 POST 方法而不是 GET 方法来传输数据。”

但是,正如您在 AJAX 函数中看到的那样,我已经在使用 POST 方法。

所以我不确定这里发生了什么以及我的代码中要更改什么来解决这个问题。我只是希望能够将非常大的变量传递给我的函数,但是使用这个函数似乎不可能。

鉴于该错误,URI 的限制似乎是导致问题的原因。但是,我使用的是 POST 方法而不是 GET 方法,那么为什么变量仍然通过 URI 传递?由于我没有使用 GET 方法,而是像许多人在其他线程中建议的关于此问题的 POST 方法,我不确定为什么这里涉及 URI 并且似乎导致了问题。

显然 URI 对我可以传输的变量的大小进行了限制,但是我使用的是 POST 方法,那么为什么会发生此错误以及如何调整我的 AJAX 函数以使其与大型变量一起工作我想使用 AJAX 传输?

4

1 回答 1

1

当您进行 POST 时,您需要将 POST 数据传递给.send(您当前传递的是 null)。您还需要设置一些标题详细信息。

myRequestObject.open("POST", pathToFileString, true);
myRequestObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
myRequestObject.setRequestHeader("Content-length", variable.length);
myRequestObject.send(variable);

如果您当前在变量的开头或路径的结尾传递了一个问号,请继续删除它。

于 2013-01-07T19:06:18.443 回答