【问题标题】:JQuery/AJAX script not sending data to php file?JQuery/AJAX 脚本不向 php 文件发送数据?
【发布时间】:2015-02-06 04:54:20
【问题描述】:

我正在使用 JQuery 和 Ajax 制作问题/状态发布系统,但是显示错误 "Notice: Undefined index: status in C:\xampp\htdocs\deadline\data.php on line 5" 这是我的代码行 "$var = $_POST['status']; "

我的系统工作正常,因为您必须登录才能发布问题(使用会话)但是问题在于我的 JQuery/AJAX 脚本作为我在 homepage.php 上的数据 没有被发送到 data.php (据我了解,这就是我的索引“状态”未定义的原因)。

我的代码

    <?php
    include("connection.php");

    session_start();

    if(isset($_SESSION['user_id']) && $_SESSION['user_id'] != "") {
    		
    	}

    	  else {

    		header("location:login.php");
    	}

    $sid = $_SESSION['user_id'];

    $conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

    $sql = "SELECT * FROM `users` WHERE id='{$sid}'";

     $query = $conn->query($sql);

    $result = $query->fetch_assoc();

    $fname = $result['fname'];

    $lname = $result['lname'];

    $time = time();

    ?>

    <html>
    <head>

    <script type="text/javascript" src="jquery.js"></script>

    <script type="text/javascript">

    //daddy code
    $ (document).ready(function() {

    //mama code
    $("button#postbutton").click(function() {
    //children code
    var status = $("textarea#status").value();

    if(status == "") {
    	return false;
    }

    var data = 'status='+status;

    $.ajax({

    type: "POST",

    url: "data.php",

    data: data,

    success: function(data) {

    $("#statustext").html(data);

    }

    });


    });

    });

    </script>
    </head>

    <body>


    <div id="global">

    <form action="" onsubmit="return false">

    <textarea id="status"></textarea>


    <button id="postbutton">POST</button>

    <a href="logout.php">LOGOUT</a>

    </form>

    <br/>
    <br/>


    <div id="allstatus">



    <!-- SKELETON -->


    <div id="status">


    <div id="statuspic">
    </div>


    <div id="statusinfo">

    <div id="statusname">JOnathan</div>
    <div id="statustext"> this is the question</div>
    <div id="statusoption"><button id="likestatus">LIKE</button></div>
    <div id="statusoption"><button id="commentstatus">COMMENT</button></div>
    <div id="statusoption"><button id="sharestatus">SHARE</button></div>
    <div id="statusoption"><button id="statustime">TIME</button></div>

    </div>

    </div>	

    <!-- SKELETON -->

    </div>

    </div>

    </body>

    </html>
    <?php

    $var = $_POST['status'];

    const DB_HOST = 'localhost';
    const DB_USER = 'root';
    const DB_PASS = '';
    const DB_NAME = 'forum';
    //connecting 

    $conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

    if($conn->connect_error) {
    	die("Connection Failed: " . $conn->connect_error);
    } else {

    echo " success";

    }


    $sql = "INSERT INTO `question`(id, question) VALUES ('', '{$var}')";

    $result = $conn->query($sql);

    if($result) {

    	echo "inserted successfuly";
    }
     else {

     	echo "failed: " . $conn->error;
     }


    echo " the text: " .$var. " has been added to database.";


    ?>

应该如何工作

我想在我的 homepage.php 上使用 JQuery/AJAX 将数据发送到 data.php,然后将数据返回到 homepage.php。成功显示在我的 div #statustext 中。

意思是当我在 textarea 输入字段中写一个问题时,数据会存储在数据库中并检索并显示在浏览器上的我的 div 中。 请帮我谢谢..

【问题讨论】:

  • 你想以哪种方式发布数据?
  • 使用 post 方法。我在我发布的第一个代码 sn-p(即 homepage.php)中编写 JQuery 代码的方式。
  • 这不是将数据发送到 POST 方法的方式。

标签: php jquery html ajax


【解决方案1】:

你应该像下面这样改变你的脚本。 Ajax 以序列化方式将数据发送到 url,要么您必须使用表单序列化,它将所有文件信息发送到您的 php url,否则如果您只需要发送一个字段值,那么您可以进行此更改

<script type="text/javascript">
    //daddy code
    $ (document).ready(function() {
        //mama code
        $("button#postbutton").click(function() {
            //children code
            var status = $("textarea#status").value();
            if(status == "") {
                return false;
            }
            var data = {'status='+status};
            $.ajax({
                type: "POST",
                url: "data.php",
                data: data,
                success: function(data) {
                    $("#statustext").html(data);
                }
            });
        });
    });
</script>

【讨论】:

    【解决方案2】:

    首先使用.val() 而不是.value() 当您获得消息的价值时。第二个错误 - 使用两个id = "sattus"。元素的 ID 必须是唯一的,或者使用 class = "" 标识您的元素类。

    【讨论】:

      【解决方案3】:

      不要给超过 1 个 html 元素提供相同的 id !

      在您的代码中:

      <textarea id="status"></textarea>
      

      <div id="status">
      

      两者都包含相同的 id !请先更正它。此外,在您的代码中,正如 Spencer 在他的回答中提到的那样,添加了值为“status”的名称属性。毫无疑问,当您使用 jQuery 选择器时,它应该选择正确的选择器,尽管您可以在使用 AJAX 发送请求之前提醒它。

      还将数据变量设置为var data = {status : status};

      【讨论】:

        【解决方案4】:

        POST 使用 name 而不是 id 所以更改这个:

        <textarea id="status"></textarea>
        

        到这里:

        <textarea name="status"></textarea>
        

        对于数据,请确保它是您的表单的数据,并将method="post" 添加到其中,以便它可以发送 POST 数据。例如,如果你给你的表单一个 ID yourForm:

        HTML

        <form action="" method="post" id="yourForm" onsubmit="return false">
        

        JS

        $.ajax({
            ...
            data: $("#yourForm").serialize(), 
            ...
        });
        

        【讨论】:

        • 对不起,我的意思是我想在没有 php 的情况下发布它,我认为我这样做是正确的,因为我想通过 ajax 发布数据。这就是为什么我有 onsubmit = "return false" ?
        • @LinDanChongWei AJAX 使用 PHP 和 POST 数据。我并不是说您需要提交表单,而是要在 AJAX 调用中从表单中获取信息。
        • @LinDanChongWei 您是否将表单数据连同将id 更改为name 一起发送?
        • 是的,我做到了,你能给我看一个 sn-p 也许让我知道做错了什么吗?
        • @LinDanChongWei 不幸的是我不能,因为 sn-ps 只是客户端。刚刚注意到一些事情,您需要将method="post" 添加到您的&lt;form&gt;
        猜你喜欢
        • 1970-01-01
        • 2014-04-01
        • 1970-01-01
        • 2017-04-23
        • 1970-01-01
        • 1970-01-01
        • 2015-10-28
        • 2015-06-26
        • 1970-01-01
        相关资源
        最近更新 更多