0

次のように、PHP スクリプトに ajax 呼び出しを送信しています。

function load(){
    var request = {};
    request['action'] = 'load';
    request['file'] = 'lorem_ipsum.txt';
    $.ajax({
        type: 'POST',
        url: cgi_file,
        data: JSON.stringify(request),
        processData: false,
        dataType: 'html',
        contentType: 'application/html',
        success:function(response){
            console.log("received " + response);
        }
    });
}

私のPHPスクリプトは次のとおりです。

$content_dir = '/static/content/';

$action = $_POST['action'];

switch ($action){
    case 'load':
        $file = $_POST['filename'];
        echo file_get_contents($content_dir . $file);
        exit();
}

PHP が次のエラーで応答しています。

Notice: Undefined index: action in /var/www/river/api.php on line 5

ここで何が問題なのですか?

4

3 に答える 3

1

溝を試すprocessData: falsecontentType: 'application/html'、うまくいくはずです

$.ajax({
    type: 'POST',
    url: cgi_file,
    data: request,
    dataType: 'html',
    success:function(response){
        console.log("received " + response);
    }
});
于 2013-01-27T04:47:02.883 に答える
1

そのままdataにしておきます:

data: request,

文字列化する必要はありません。

また、fileパラメータにより、攻撃者はファイルシステムから任意のファイルを読み取ることができます。それを消毒します。

于 2013-01-27T04:25:08.270 に答える
0

ここでいくつか問題があります。まず、contentTypeプロパティはサーバーに送信するデータ用であり、次に、サーバーから受信してtextいるものであるため、dataType を設定する必要があります。配列でデータを受け取りたい場合$_POST、JavaScript は次のようになります。

$.ajax({
    type: 'POST',
    url: cgi_file,
    data: {
        action: "load",
        file: "lorem_ipsum.txt";
    },
    dataType: 'text',
    success:function(response){
        console.log("received " + response);
    }
});

Jquery は、データを標準の投稿としてサーバー側コードに送信します。

于 2013-01-27T05:01:35.790 に答える