AJAX成功函数不从MYSQL数据库中获取数据

时间:2018-02-05 06:22:16

标签: php jquery mysql ajax

对此帖与我之前的帖子之间的相似之处表示道歉。我很感激,如果有人能再次帮助我找到我出错的地方。其他一切似乎都运转正常,但令我困惑的是对AJAX成功功能的“安静”反应。控制台中没有任何东西。

我已经使用json_encode和print_r函数测试了JSON输出并获得了以下内容 - 所以我假设JSON字符串应该可以使用AJAX:

Array
(
    [proj_start_date] => 2017-04-17
    [proj_end_date] => 2018-04-30
    [wo_nbr_new] => 10002-06
)
{"proj_start_date":"2017-04-17","proj_end_date":"2018-04-30","wo_nbr_new":"10002-06"}

以下是主文件的代码:

<?php
include 'connect_db.php';
$sql = "SELECT * FROM projects ORDER BY proj_nbr";
$result = mysqli_query($connect,$sql);
$rowCount = mysqli_num_rows($result);

?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Add New Work Order</title>
    <script
        src="https://code.jquery.com/jquery-3.2.1.min.js"integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
        crossorigin="anonymous">
    </script>
    <link rel="stylesheet" type="text/css" href="styles.css">
</head>

<body>

<h1>Add New Work Order</h1>

<div id="forms-add" name="forms-add">
<form action="add_workorders.php" method="POST">
    <label>Work Order Number (Auto-generated):</label>
    <input type="text" id="wo_nbr" name="wo_nbr"size="8"maxlength="8" value = "" readonly style="float: right"> 
    <br><br>
    <fieldset>
        <legend>Project Details</legend>

        <label>Project Number:</label>
        <select  class= "selects" id="proj_nbr" name="proj_nbr" required onchange="">
            <option value="">Select a project </option>
                <?php       
                    if($rowCount>0)
                    {
                        while ($row=mysqli_fetch_assoc($result))
                        {
                            echo '<option value="'.
                                $row['proj_id'].'">'.
                                $row['proj_nbr'].
                                ' - '.
                                $row['proj_desc'].
                                ' </option>';                
                        }
                    }
                    else
                    {
                        echo '<option value="">Project not available</option>';
                    }           
                ?>
        </select>
        <br><br>
        <label>Start Date:</label>
        <input type="text" id="proj_start_date" name="proj_start_date"size="8"maxlength="8" value = "" readonly style="float: right">
        <br><br>
        <label>End Date:</label>
        <input type="text" id="proj_end_date" name="proj_end_date"size="8"maxlength="8" value = "" readonly style="float: right">

    </fieldset>
    <br><br>

    <button type="submit" name="submit" >Save Work Order</button>

    </form>
</div>
</body>
    <script type="text/javascript" src="test_ajax.js"></script>

    <script>
        $(document).ready(function()
        {
            $('#proj_nbr').change(function()
            {
                var id=$('#proj_nbr').val();
                //alert(id); //this works ok 
                if (id != '')
                {
                    $.ajax({ 
                        url: "get_proj_nbrs2.php",
                        method:"POST",
                        data: {id:id}, //data to SEND to PHP file
                        dataType: "JSON",
                        success: function(output) 
                        {
                                console.log(output); //this doesn't return anything in the console??
                                $('#wo_nbr').val(output.wo_nbr_new);
                                $('#proj_start_date').val(output.proj_start_date);
                                $('#proj_end_date').val(output.proj_end_date);
                        }
                    });
                }
                else
                {
                    alert("Please select a Project");
                }           
            });
        });
    </script>

</html>

以下是PHP文件中的代码:

<?php
include 'connect_db.php';

if (isset($_POST['id']) && !empty($_POST['id']))
{
    $sql2 = "SELECT p.proj_nbr as wo_proj_nbr,p.start_date as proj_start_date,p.end_date as proj_end_date, MAX(w.wo_nbr) AS wo_nbr,
                            CASE WHEN SUBSTRING(MAX(w.wo_nbr),7,2)+1 <= 9 THEN CONCAT(p.proj_nbr,'-0',SUBSTRING(MAX(w.wo_nbr),7,2)+1) 
                            ELSE CONCAT(p.proj_nbr,'-',SUBSTRING(MAX(w.wo_nbr),7,2)+1) END AS wo_nbr_new
                            FROM workorders as w 
                            INNER JOIN projects as p on p.proj_id = w.proj_id
                            WHERE w.proj_id = '".$_POST['id']."'";
    $result2 = mysqli_query($connect,$sql2);

    while($row=mysqli_fetch_array($result2))
    {           
        if($result2 ==true)
        {
            $proj_nbr = $row['wo_proj_nbr'];
            $output['proj_start_date'] = $row['proj_start_date'];
            $output['proj_end_date'] = $row['proj_end_date'];               
            if ($row['wo_nbr_new'] != NULL)
            {
                $output['wo_nbr_new'] = $row['wo_nbr_new'];
                echo json_encode($output);
            }
            elseif($row['wo_nbr_new'] == NULL)
            {
                $output['wo_nbr_new'] = $proj_nbr."-01";
                echo json_encode($output);                          
            }
        }
    }
}?>

3 个答案:

答案 0 :(得分:0)

请确认您的id值不为空且与数据库字段值匹配。如果是这样,那么改变“id”#39;到了&#39; theid&#39; (可能是保留字)在ajax例如

  data: {theid:id}, //data to SEND to PHP file

并在php中。

if (isset($_POST['theid']) && !empty($_POST['theid'])) {
$sql2 = "SELECT p.proj_nbr as wo_proj_nbr,p.start_date as proj_start_date,p.end_date as proj_end_date, MAX(w.wo_nbr) AS wo_nbr,
                        CASE WHEN SUBSTRING(MAX(w.wo_nbr),7,2)+1 <= 9 THEN CONCAT(p.proj_nbr,'-0',SUBSTRING(MAX(w.wo_nbr),7,2)+1) 
                        ELSE CONCAT(p.proj_nbr,'-',SUBSTRING(MAX(w.wo_nbr),7,2)+1) END AS wo_nbr_new
                        FROM workorders as w 
                        INNER JOIN projects as p on p.proj_id = w.proj_id
                        WHERE w.proj_id = '".$_POST['theid']."'";
// code goes here
}

答案 1 :(得分:0)

<?php
include 'connect_db.php';

if (isset($_POST['id']) && !empty($_POST['id']))
{
$result = array();
    $sql2 = "SELECT p.proj_nbr as wo_proj_nbr,p.start_date as proj_start_date,p.end_date as proj_end_date, MAX(w.wo_nbr) AS wo_nbr,
                            CASE WHEN SUBSTRING(MAX(w.wo_nbr),7,2)+1 <= 9 THEN CONCAT(p.proj_nbr,'-0',SUBSTRING(MAX(w.wo_nbr),7,2)+1) 
                            ELSE CONCAT(p.proj_nbr,'-',SUBSTRING(MAX(w.wo_nbr),7,2)+1) END AS wo_nbr_new
                            FROM workorders as w 
                            INNER JOIN projects as p on p.proj_id = w.proj_id
                            WHERE w.proj_id = '".$_POST['id']."'";
    $result2 = mysqli_query($connect,$sql2);
if($result->num_rows > 0)
        {
    while($row=mysqli_fetch_array($result2))
    {           

            $proj_nbr = $row['wo_proj_nbr'];
            $output['proj_start_date'] = $row['proj_start_date'];
            $output['proj_end_date'] = $row['proj_end_date'];               
            if ($row['wo_nbr_new'] != NULL)
            {
                $output['wo_nbr_new'] = $row['wo_nbr_new'];

            }
            elseif($row['wo_nbr_new'] == NULL)
            {
                $output['wo_nbr_new'] = $proj_nbr."-01";

            }
           array_push($result,$output);
        }
      echo json_encode($result);
    }
  else
    {
      echo "no rows found";
     }
}?>

你回应每一行,所以你将从ajax中获得成功函数的结果作为每个单独的刺痛。所以它无法解析。希望这种方法能解决你的问题。

答案 2 :(得分:0)

在方法中使用type。方法POST依赖于jquery版本

 $.ajax({ 
     url: "get_proj_nbrs2.php",
     type:"POST",
     data: {id:id}, //data to SEND to PHP file
     dataType: "JSON",
     success: function(output) 
     {

     }
 });