JQuery / AJAX脚本不发送数据到php文件?

时间:2015-02-06 04:54:20

标签: php jquery html ajax

我正在使用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>
&#13;
&#13;
&#13;

    <?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 < / strong>即可。成功显示在我的div #statustext中。

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

4 个答案:

答案 0 :(得分:2)

您应该像下面一样更改脚本。 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>

答案 1 :(得分:1)

POST使用name而非id,因此请更改:

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

对此:

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

对于数据,请确保它是表单的数据,并向其添加method="post"以便它可以发送POST数据。例如,如果您为表单提供了yourForm的ID:

<强> HTML

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

<强> JS

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

不要为1个以上的html元素提供相同的ID!

在您的代码中:

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

<div id="status">

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

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