Jquery Ajax表现得很奇怪

时间:2014-07-30 22:20:20

标签: php jquery ajax

您好我已经在这几天了,我只是想弄清楚为什么这不起作用,请有人来看看。

的index.php

<form id = "update_status" method = "POST">
                        <textarea id="shadow" name ="user_status" placeholder = "Share what is on your mind!" cols="97" rows="1" title="Share what's on your mind"></textarea>

                        <input style="float:right; margin-top: 0.3%;margin-right : 0% !important;" id = "btnStatus_update" name = "btnStatus_udate" type="button" value="Add Post" title="Your posts will be made public"></input></form>

swift.php

$(document).ready(function(){ 
    $("#btnStatus_update").click(function(e) { 
    e.preventDefault();
    //alert("Confirming function works");
        $.ajax({
        cache: false,
        type: 'POST',
        url: './datacenter.php',
        data: $("#user_status"),
        success: function(d) {
            $("#successMesg").html(d);
        }
        });
    }); 
});

datacenter.php

if (isset($_POST['user_status'])) {
    var_dump($_POST['user_status']);
        foreach ($_POST as $ak => $av) {
            if (empty(trim($_POST['user_status']))) {
                echo 'Say what is on your mind'.' ';
            } else {
                $userstatus = $_POST['user_status'];
                add_user_status($user_data['id'], $userstatus);
            }
        }
    }

使用var_dump进行测试我希望它确实返回数据,但我得到NULL,我需要数据,所以我可以将它传递到add_user_status函数以添加到数据库,但似乎有些东西丢失或关于代码否认我的满意度。请帮忙

2 个答案:

答案 0 :(得分:1)

似乎缺少一些东西:

的index.php:

您需要在表单标记中添加action="something"属性,这会告诉表单提交时要执行的操作。 (除非你手动处理这个是其他地方的JS?)

<form id = "update_status" action ="data.php" method = "POST">

此外,除非您在索引页面上使用JavaScript来处理表单的实际提交,否则<input>应包含type="submit"属性。 (这也会使其成为一个按钮),点击后它会自动将表单提交到上面的action位置。

Swift.php:

发布的代码是JS,并执行上一段提到的第一行(处理提交按钮)。您是否在index.php中包含此文件?如果index.php无法看到它,那么它就不会运行。它也必须位于适当的<script>块中的某个地方。

我认为使用ajax发送表单数据的正确方法是序列化数据: $('#update_status').serialize()而不只是发送一个输入字段。

您还需要引用jQuery库,最好是在索引中,但也可以在swift.php中引用。我还假设发布的代码出现在必要的<script>块中。

Data.php:

这应该是datacenter.php吗?您的Swift.php正在向./datacenter.php

发送ajax请求

另外,如果您需要使用Ajax,那么您实际上并不需要表单中的action ="data.php" method = "POST"(Ajax会为您完成所有这些)

可以这样做的方式是这样的:

的index.php:

// HTML beginning stuff
<head>
// Either reference the script in its own JS file or:
// Need to also include jquery library
<script type="text/javascript">
$(document).ready(function(){ 
    $("#btnStatus_update").click(function(e) { 
    e.preventDefault();
    //alert("Confirming function works");
        $.ajax({
        cache: false,
        type: 'POST',
        url: './datacenter.php',
        data: $('#update_status').serialize(),
        success: function(d) {
            $("#successMesg").html(d);
        }
        });
    }); 
});
</script>
</head>
<body>
<form id = "update_status">
<textarea id="shadow" name ="user_status" placeholder = "Share what is on your mind!" cols="97" rows="1" title="Share what's on your mind"></textarea>
<input style="float:right; margin-top: 0.3%;margin-right : 0% !important;" id = "btnStatus_update" name = "btnStatus_udate" type="button" value="Add Post" title="Your posts will be made public"></input>
</form>
</body>

datacenter.php:

<?php
var UserStatus = user_status
if (!empty(UserStatus)) {
    var_dump($_POST['user_status']);
// process as necessary
}

?>

但是,包括 <form id = "update_status" action ="datacenter.php" method = "POST"> 并将按钮更改为

<input style="float:right; margin-top: 0.3%;margin-right : 0% !important;" id = "btnStatus_update" name = "btnStatus_udate" type="submit" value="Add Post" title="Your posts will be made public">

如果禁用了JavaScript,

将允许用户仍然发布信息。

答案 1 :(得分:0)

textarea的选择器不正确,id不是“user_status”,它的“影子”

data: $("#user_status"),

应该是:

data: $("textarea[name=user_status]") 

data: $("#shadow")