1

ajax を使用して大量のデータを送信する単純なフォームを取得しました。ブログ投稿を作成できる小さな CMS を作成しています。

ブログの JavaScript は次のようになります。

function SaveBlog()
    {
        document.getElementById("txtHint").innerHTML= 'Saving...';
        if(window.XMLHttpRequest)
        {
            xmlhttp = new XMLHttpRequest();
        }
            else
        {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange=function()
        {
            if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
            }
        }
        var TitleVar = document.getElementById('title').value;
        var editorText = CKEDITOR.instances.blogcontent.getData();
        xmlhttp.open("GET","saveblog.php?id="+<?php echo $_GET['update']; ?> + "&title=" + TitleVar + "&context=" + encodeURIComponent(editorText),true);
        xmlhttp.send();
    }

これは背後にあるphpスクリプトです

$ID = $_GET['id'];
$con = mysql_connect("", "", "");
mysql_select_db("FP", $con);
$Title = $_GET['title'];
$Context = mysql_real_escape_string($_GET['context']);
mysql_query("UPDATE Blog SET BlogTitle='$Title', Entry='$Context' WHERE Identifier='$ID'");
//echo "ID: " . $_GET['id'] . " Title: " . $_GET['title'] . " Context: " . $_GET['context'];
echo '<b>Last Save: </b>' . date("F j, Y, g:i:s a");

約 2000 文字までしか送信していない場合、すべてがうまく機能します。その後、「保存中...」と表示されるだけで、他には何も表示されません。

4

2 に答える 2

3

大量のデータ ペイロードを送信するには、GET リクエストではなく、POST リクエストを使用する必要があります。投稿リクエストに変更

于 2013-04-27T21:04:29.270 に答える
3

GET リクエストを使用しています。つまり、URI の長さに関して Web サーバーで何らかの制限に達している可能性があります。(参照: 414 Request-URI が大きすぎます)

代わりに POST を使用する必要があります。また、GET 変数 'title' は SQL インジェクションに対して脆弱です。変数 'c​​ontext' と同じ方法でエスケープする必要があります。

于 2013-04-27T21:09:07.493 に答える