【问题标题】:GET function not work when i use POST at the same time on ajax for dropdown show data当我在 ajax 上同时使用 POST 进行下拉显示数据时,GET 功能不起作用
【发布时间】:2019-07-15 02:23:14
【问题描述】:

所以我尝试使用 ajax 显示数据并按值过滤它... 当我只显示所有数据时它就起作用了 但我想让显示数据按下拉值过滤,并且需要发布以获取下拉选择值

然后当我完成后,我可以让 POST 功能在控制台上运行,我得到的响应根本没有问题 但查看数据的获取功能不起作用 所以数据不会加载...

prepro.php 用于下拉功能(似乎完全没有问题)

<select id="data_latih">
<option value="" selected="selected">Pilih Dokumen keberapa</option>
<?php
$sql = "SELECT DISTINCT dokumen FROM dt_latih ";
$resultset = mysqli_query($connection, $sql) or die("database error:". mysqli_error($connection));
while( $rows = mysqli_fetch_assoc($resultset) ) {
?>
<option value="<?php echo $rows["dokumen"]; ?>"><?php echo $rows["dokumen"]; ?></option>
<?php } ?>
</select>

关于 ajax 函数的 prepro.php

function viewData(){
        $.ajax({
            url: 'proseslabel.php?p=view',
            method: 'GET'
        }).done(function(data){
            $('tbody').html(data)
            tableData()
        })
    }
    function tableData(){
        $('#tabledit').Tabledit({
            url: 'proseslabel.php',
            eventType: 'dblclick',
            editButton: true,            
            deleteButton: false,
            hideIdentifier: false,
            buttons: {
                edit: {
                    class: 'btn btn-sm btn-warning',
                    html: '<span class="glyphicon glyphicon-pencil"></span> Edit',
                    action: 'edit'
                },
                save: {
                    class: 'btn btn-sm btn-success',
                    html: 'Save'
                }
            },
            columns: {
                identifier: [0, 'id_latih'],
                editable: [[16, 'label', '{"1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6"}']]
            },
            onSuccess: function(data, textStatus, jqXHR) {
                viewData()
            },
            onFail: function(jqXHR, textStatus, errorThrown) {
                console.log('onFail(jqXHR, textStatus, errorThrown)');
                console.log(jqXHR);
                console.log(textStatus);
                console.log(errorThrown);
            },
            onAjax: function(action, serialize) {
                console.log('onAjax(action, serialize)');
                console.log(action);
                console.log(serialize);
            }
        });
    }
          $("#data_latih").change(function() {
          var id = $(this).find(":selected").val();
          $.ajax({
          url: 'proseslabel.php?p=view',
          method:"POST",
          data: {id:id},
          dataType: "json",
          cache: false,
          success: function(data) {
            console.log(data);
            $('tbody').html(data);
             viewData;
            tableData();
          }
          });
        });


</script>

proseslabel.php 用于显示数据

$page = isset($_GET['p'])? $_GET['p'] : '' ;
if($page=='view'){
    if(isset($_POST["id"]))
{
    $result = $mysqli->query("SELECT * FROM dt_latih ");
    while($row = $result->fetch_assoc()){
        ?>
        <tr>
            <td><?php echo $row['id_latih'] ?></td>
            <td><?php echo $row['kalimat'] ?></td>
            <td><?php echo $row['x1'] ?></td>
            <td><?php echo $row['x2'] ?></td>
            <td><?php echo $row['x3'] ?></td>
            <td><?php echo $row['x4'] ?></td>
            <td><?php echo $row['x5'] ?></td>
            <td><?php echo $row['x6'] ?></td>
            <td><?php echo $row['x7'] ?></td>
            <td><?php echo $row['x8'] ?></td>
            <td><?php echo $row['x9'] ?></td>
            <td><?php echo $row['x10'] ?></td>
            <td><?php echo $row['x11'] ?></td>
            <td><?php echo $row['x12'] ?></td>
            <td><?php echo $row['x13'] ?></td>
            <td><?php echo $row['x14'] ?></td>
            <td><?php echo $row['label'] ?></td>
        </tr>
        <?php
    }
    }
} else{

    // Basic example of PHP script to handle with jQuery-Tabledit plug-in.
    // Note that is just an example. Should take precautions such as filtering the input data.

    header('Content-Type: application/json');

    $input = filter_input_array(INPUT_POST);



    if ($input['action'] == 'edit') {
        $mysqli->query("UPDATE dt_latih SET label='" . $input['label'] . "' WHERE id_latih='" . $input['id_latih'] . "'");
    } else if ($input['action'] == 'delete') {
        $mysqli->query("UPDATE tabledit SET deleted=1 WHERE id_latih='" . $input['id_latih'] . "'");
    } else if ($input['action'] == 'restore') {
        $mysqli->query("UPDATE tabledit SET deleted=0 WHERE id_latih='" . $input['id_latih'] . "'");
    }

    mysqli_close($mysqli);

    echo json_encode($input);

}

数据只是不会加载,但在控制台检查元素中,我得到了我想要回显的所有值

【问题讨论】:

  • 警告:您容易受到 SQL 注入攻击! 攻击者可以轻松地对您的数据库运行任意代码。您应该强烈考虑使用prepared statements 和参数化查询。您可以使用 PDO 或 MySQLi 执行此操作。 永远不要相信输入,尤其是来自客户端的输入。即使只有受信任的用户使用您的系统,there is still the chance of corrupting your database
  • @Hoppeduppeanut 谢谢你提醒我,没关系,因为我的应用程序都在本地主机中
  • 即便如此,您仍然应该考虑使用准备好的语句。强制执行以防止应用中相当严重的漏洞是一个好习惯,即使它仅在本地环境中也是如此。
  • 当你说“但是在控制台检查元素中,我得到了我想要回显的所有值”,你的意思是你可以看到你的 ajax 调用正在控制台网络选项卡中返回正确的数据吗?

标签: php jquery ajax dropdown


【解决方案1】:

在您的viewData() 函数中,您应该在AJAX 调用的数据选项中而不是在url 中定义您的参数。像这样:

function viewData(){
    $.ajax({
        url: 'proseslabel.php',
        method: 'GET',
        data: {p:'view'}
    }).done(function(data){
        $('tbody').html(data);
        tableData();
    })
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多