-2

我有一个用户输入数据的表单和一个显示数据库中所有行的表。现在,当用户单击其中一行旁边的“编辑”链接时,我想将 ID 发布到 PHP 文件并将该行中的数据加载到表单中。

这就是我发布 ID 的方式(并且有效)

jQuery('a.edit').on('mousedown', function(){
    var id = jQuery(this).attr('data-title');
    jQuery.ajax({
        url: document.location,
        data: {id: id}
    });
})

这就是我尝试接收发布的 ID 的方式(不起作用)

if( isset( $_GET['id'] ) ){
    $id = $_GET['id'];
    load_data($id);
}

我想我需要刷新页面?我怎样才能做到这一点?我也可以刷新表格吗?

编辑:我仍然认为这是一个重新加载/刷新问题。该值正在发布,但我的 PHP 无法识别,因为它没有重新加载。我见过有人用 jQuery 做这个而不是重新加载整个页面,但我没有重新创建这个。也许还值得一提的是,这些文件是 Wordpress 插件的一部分。

所以这是整个代码(我的插件叫做“spielerportraits”)

spielerportraits-admin.php

<?php 
function print_data(){
    global $wpdb;
    $datatable = $wpdb->get_results( 
        'SELECT * FROM ' . $wpdb->prefix . 'spielerportraits' ); 
?>

<table id="spieler-output">
    <tr>
        <td>Name</td>
        <td>Geb.datum</td>
    </tr>

<?php foreach( $datatable as $data ) { ?>
    <tr>
        <td><?php echo $data->name; ?></td>
        <td><?php echo $data->gebdatum; ?></td>
        <td><a href="" class="edit" data-title="<?php echo $data->id;?>">bearbeiten</a></td> // The edit-link for jQuery
    </tr>

<?php }
?>
    </table>
<?php
} 

if(isset($_GET['id'])){
    global $wpdb;
    $loaddata = $wpdb->get_row( 
        'SELECT * FROM '.$wpdb->prefix.'spielerportraits WHERE id = '.$_GET['id'] ); 
}
?>


<form enctype="multipart/form-data" name="spieler-form" action="" method="post">
    <table id="spieler-input">
        <tr>
            <td>Name: </td>
            <td><input type="text" name="name" value="<?php if( isset($loaddata) ){echo $loaddata->name;}?>" size="40"></td>
        </tr>
        <tr>
            <td>Geburtsdatum: </td>
            <td><input type="text" name="gebdatum" value="<?php if( isset($loaddata) ){echo $loaddata->gebdatum;}?>" size="40"></td>
        </tr>
        <tr>
            <td class="submit">
                <input type="submit" name="submit" value="Hinzufügen" />
            </td>
        </tr>
    </table>
</form>

<?php
    print_data();
?>

JS

jQuery('a.edit').on('mousedown', function(){
    var id = jQuery(this).attr('data-title');
    jQuery.ajax({
        url: document.location,
        data: {id: id},
        success: function(data){
            alert(data['id']); // This does show, but gives me 'undefined'
        }
    });
});

这就是插件在 Wordpress (spielerportraits.php) 中的初始化方式:

<?php

add_action( 'admin_enqueue_scripts', 'spielerportraits_style' );
add_action('admin_menu', 'spielerportraits_custom_menu_page');

function spielerportraits_custom_menu_page() {
   $page = add_menu_page( 'Spielerportraits', 'Spielerportraits', 'manage_options', 'spielerportraits/spielerportraits-admin.php', '', '' ), 33 );
}

function spielerportraits_style() {
    wp_enqueue_script( 'spielerportraits-admin-script', plugins_url('/script.js', __FILE__) );

}

global $jal_db_version;
$jal_db_version = "1.0";

function jal_install() {
   global $wpdb;
   global $jal_db_version;

   $table_name = $wpdb->prefix . 'spielerportraits';

   $sql = "CREATE TABLE $table_name (
        id int NOT NULL AUTO_INCREMENT,
        name tinytext NOT NULL,
        gebdatum date',
        PRIMARY KEY id (id)
    );";

    if( $wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name ) {
        require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
        dbDelta( $sql );
        add_option( "jal_db_version", $jal_db_version );
    }
}

register_activation_hook( __FILE__, 'jal_install' );

?>
4

4 回答 4

0

通常,ajax 调用可能如下所示:

jQuery.ajax({
  url: ajaxurl, // for example a PHP file that will process the request
  data:{
    mykey: myvalue
  },
  success: function( data ){
    console.log( data );
  } 
});

PHP 文件可能如下所示:

$mykey = isset( $_GET['mykey'] ) ? $_GET['mykey'] : false;

if( $mykey ){
  //Do whatever you like with this, but you need to print out something: a return value
  echo $mykey
}

我认为你需要echo返回的值load_data($id);,如果这个值是一个数组,我建议你:

echo json_encode( load_data($id) );

希望能帮助到你!让我知道你是否卡住了

于 2013-08-26T18:07:13.397 回答
0

这是一种重新加载问题。这就是我为使其工作所做的工作:

jQuery('a.edit').on('mousedown', function(){
    var id = jQuery(this).attr('data-title');
    alert(id);
    jQuery.ajax({
        url: document.location,
        data: {id: id},
        success: function(data){
            var newDoc = document.open("text/html", "replace");
            newDoc.write(data);
            newDoc.close();
        }
    });
});

这种方法不仅可以替换文档的部分内容,还可以为您提供页面历史记录,这对用户非常有帮助。

于 2013-08-27T06:09:14.083 回答
-1

需要告知请求方法的类型:

$.ajax({
type: "GET",
...
于 2013-08-26T17:38:28.590 回答
-2

在您发布数据时更改$_GET$_POST

于 2013-08-26T17:33:59.253 回答