PHP无法识别ajax发布的数据

时间:2013-01-27 04:23:50

标签: php javascript ajax

我正在向我的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

这里有什么问题?

3 个答案:

答案 0 :(得分:1)

按原样保留data

data: request,

您不需要对其进行字符串化。

此外,您的file参数允许攻击者从您的文件系统中读取任意文件。消毒它。

答案 1 :(得分:1)

尝试沟渠processData: falsecontentType: 'application/html',它应该有效

$.ajax({
    type: 'POST',
    url: cgi_file,
    data: request,
    dataType: 'html',
    success:function(response){
        console.log("received " + response);
    }
});

答案 2 :(得分:0)

这里有一些问题,首先contentType属性用于发送到服务器的数据,其次dataType应设置为text,因为这是您从服务器接收的内容。如果您想在$_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会将您的数据作为标准帖子发送到您的服务器端代码。