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 や他の Web サイトを調べました。ただし、ほとんどの回答は、「GET メソッドの代わりに POST メソッドを使用してデータを転送する」という結論になります。

ただし、AJAX 関数でわかるように、私は既に POST メソッドを使用しています。

したがって、ここで何が起こっているのか、この問題を解決するためにコードで何を変更すればよいのかわかりません。非常に大きな変数を自分の関数に渡せるようにしたいだけですが、この関数ではそれが不可能に思えます。

エラーを考えると、URI の制限が問題を引き起こしているようです。しかし、GET メソッドではなく POST メソッドを使用しているのに、変数がまだ 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 に答える