AJAX解析URL将变量传递给MySQL查询

时间:2015-12-17 19:43:38

标签: php mysql ajax

一直无法通过URL将变量传递给MySQL查询,在这里阅读了各种解决方案并试图通过AJAX和JQuery解决这个问题,但无济于事。

通过MySQL查询填充列表(表),产生如下所示的链接:

echo "<td class='listingTextCentre'><a class='green' href='?sid=".$row[0]."&hid=".$row[1]."'> S".$row[0]."</a></td>";

当我将鼠标悬停在链接上时,获取sid和hid的正确值。我试图通过下面的AJAX传递sid和hid变量:

$('a').on('click', function(e) {
    e.preventDefault();
    $.ajax ({
        url: "srlisting.php",
        type: "get",
        data: {sid: sid, hid: hid},
        success: function(response) {
            $('#divresult').load("srlisting.php");
        },
    });
});

但是,当点击链接时,我在控制台中收到错误:

enter image description here

非常感谢任何帮助。

srlisting.php文件的代码:

    <?php
    include 'dbconnect.php';

    $sid = $_POST['sid'];

    $rawList = "SELECT * FROM scheds WHERE sched_id = '$sid'";
    $scheduleList = $connection->query($rawList);

    mysql(close); 
    ?>

控制台输出如下所示:

enter image description here

enter image description here

enter image description here

linktest.php:

<?php


?> 

<html>
    <head>
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    </head>

    <body>

        <table>
            <tr><td class='listingTextCentre'><a href='?sid=1&hid=634' class='green'>S1</a></td></tr>
        </table>

<script>

//$("clickme").click(function() {
$('a').on('click', function(e) {
    e.preventDefault();

    var href = $(this).attr('href').substring(1);
    hParts = href.split('&');
    var dataString = '';
    $.each(hParts, function(index,value){
        var vParts = value.split('=');
        dataString += vParts[0] + ':' + vParts[1] + ',';
    });
    sendData = '{' + dataString.slice(0, -1) + '}'; // returns {sid:"$row[0]",hid:"$row[1]"}
    $.ajax ({
        url: "phplinktest.php",
        type: "post",
        data: sendData, // place the string here
        success: function(response) {
            $('#divresult').html(response);
            $('#divresult').show();
        },
    });
});

</script>

    </body>
</html>

phplinktest.php:

<?php

    error_reporting(E_ALL); ini_set('display_errors', 1);

    $sid = $_POST['sid'];
    echo $sid;

    var_dump($_POST);         

?>

2 个答案:

答案 0 :(得分:2)

点击后,您需要获得sidhid的值。这意味着您必须解析链接href属性,这可以在不修改标记的情况下完成

$('a').on('click', function(e) {
    e.preventDefault();
    var href = $('a').attr('href').substring($('a').attr('href').indexOf('?') + 1);
    hParts = href.split('&');
    var dataString = '';
    $.each(hParts, function(index,value){
        var vParts = value.split('=');
        dataString += vParts[0] + ':' + vParts[1] + ',';
    });
    sendData = '{' + dataString.slice(0, -1) + '}'; // returns {sid:"$row[0]",hid:"$row[1]"}
    $.ajax ({
        url: "srlisting.php",
        method: "post",
        data: sendData, // place the string here
        success: function(response) {
            $('#divresult').html(response);
        },
    });
});

解析href属性有点复杂,但最终会得到您想要的结果。解析这些值,然后将其发送到PHP脚本进行处理。

  1. 获取href属性minus the starting ?
  2. 的值
  3. split &
  4. 上的字符串
  5. loop through,拆分每个剩余的字符串以获取变量名称和值
    1. 将变量名称和值以可以在帖子字符串中使用的方式连接在一起
  6. 通过在字符串
  7. 中添加括号和removing the last ,来完成

    修改

    最后,您尝试使用.load()函数将从AJAX返回的数据放入div.load()本质上是另一个不需要的AJAX调用,实际上不应该使用。您应该只将div中的HTML设置为AJAX调用的响应:

    success: function(response) {
        $('#divresult').html(response);
    },
    
    只要href是正确的查询字符串,

    EDIT 就会从链接中的href获取正确的子字符串,无论其配置方式如何

答案 1 :(得分:0)

gplots