Jtable ajax post不起作用

3

我正在使用JTable网站上提供的PHP示例代码。但是我无法从AJAX POST中获取值。

我的JTableSimple.php中的JavaScript代码:

$(document).ready(function () {

        //Prepare jTable
        $('#PeopleTableContainer').jtable({
            title: 'Table of people',
            actions: {
                listAction: 'PersonActions.php?action=list',
                createAction: 'PersonActions.php?action=create',
                updateAction: 'PersonActions.php?action=update',
                deleteAction: 'PersonActions.php?action=delete'
            },
            fields: {
                PersonId: {
                    key: true,
                    create: false,
                    edit: false,
                    list: false
                },
                Name: {
                    title: 'Author Name',
                    width: '40%'
                },
                Age: {
                    title: 'Age',
                    width: '20%'
                },
                RecordDate: {
                    title: 'Record date',
                    width: '30%',
                    type: 'date',
                    create: false,
                    edit: false
                }
            }
        });

        //Load person list from server
        $('#PeopleTableContainer').jtable('load');

    });

PersonActions.php(仅用于列表组件):

require_once 'config.php';
// connecting to mysql
$con = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
// selecting database
mysql_select_db(DB_DATABASE);
//Getting records (listAction) 
if($_GET["action"] == "list")
{
    //Get Name
    $Name = $_POST['Name'];
    //SQL query
    $result = mysql_query("select * from user_data WHERE Name=$Name");
    //Add selected records into an array
    $rows = array();
    while($row = mysql_fetch_array($result))
    {
        $rows[] = $row;
    }

    //Return result to jTable
    $jTableResult = array();
    $jTableResult['Result'] = 'OK';
    $jTableResult['Records'] = $rows;
    print json_encode($jTableResult);
}

我正在使用XAMPP。 我到目前为止尝试过以下方法:

  • 使用var_dump($ _POST),但没有返回任何内容。
  • 重新安装XAMPP
  • 重新安装所有JTable、JQuery、Jquery UI头文件和所有css文件。
  • 使用GET而不是POST,但这也不起作用。

当我打开'PersonActions.php?action=list'时,我收到一个通知:

Notice: Undefined index: Name in C:\xampp\htdocs\PersonActions.php on line xx

我想这意味着$_POST['Name']不存在?
1个回答

0

我曾经遇到过同样的问题。尝试在表格属性中的操作组件之前添加以下内容:

ajaxSettings: {
        type: 'POST', 
        data: {'VariableName': 'VariableValue'},
        url: './PersonActions.php'
        },

这是因为'action'列表不会通过AJAX方法向您的PersonActions.php发送任何数据,您需要手动做。

对于其他操作(如'update'和'delete'),您无需进行任何其他更改,只需像JTable示例代码中所示使用$_POST ['Fieldname']即可。

另外,我建议安装Firebug。它对于查看POST数据非常有用,并提供了一个额外的调试工具。

编辑#1:对于使用PHP的主 / 子表:

如果要添加子表,请将以下代码作为主表中的附加字段添加。我已将该字段命名为“ChildTableButton”。

           fields: {
                ChildTableButton: {
                        title: '',
                        width: '3%',
                        sorting: false,
                        edit: false,
                        create: false,
                        display: function (ChildData) {
                            //Image that will open child table
                            var $img = $('<img src="./img/more.png"/>');
                            //Open child table when user clicks the image
                            $img.click(function () {
                                $('#PeopleTableContainer').jtable('openChildTable',
                                        $img.closest('tr'),
                                        {
                                            title: 'Title',
                                            actions: {
                                                listAction: './tableactions.php?action=listchild',
                                               updateAction:'./tableactions.php?action=updatechild',
                                                deleteAction: './tableactions.php?action=deletechild'
                                                },
                                            fields: {
                                                Field1: {
                                                    title: 'Field 1 child table',
                                                    key: true,
                                                    create: false,
                                                    edit: false,
                                                    width: '50%'
                                                },
                                                Field2: {
                                                    title: 'Field 2 child table',
                                                    width: '50%'
                                                }
                                            }
                                        }, function (data) { //opened handler
                                            data.childTable.jtable('load');
                                        });
                            });
                            //Return image to show on the person row
                            return $img;
                        }
                    },

然后您可以通过检查action='listchild'等来处理PHP端,就像处理主表一样。

希望这可以帮助到您!


那个完美地运作了!谢谢。你尝试过在 PHP 中使用父/子吗?我无法让它工作或找到一个好的例子。 - Josh Brushante
我已经更新了答案,包括使用PHP的主/子代码片段。 - Calum
没问题。如果您有任何疑问,请在评论中留言。 - Calum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接