Javascript AJax变量无法发送到php变量

Javascript AJax变量无法发送到php变量,javascript,php,jquery,ajax,forms,Javascript,Php,Jquery,Ajax,Forms,我对Ajax和Jquery非常陌生,通过SO和在线教程学习,所以请记住,如果你阅读我的文章,我是新手,请耐心回答我的帖子 我已经创建了以下表单,它在提交时显示消息。如果表单已成功提交,则会显示一条消息,而不会刷新页面,如下图所示: 表格 消息 谢谢,我们会回复你的 哎呀……出了点问题 JQUERY $(function(){ $("#contact-form").submit(function(e){ e.preventDefault();

我对Ajax和Jquery非常陌生,通过SO和在线教程学习,所以请记住,如果你阅读我的文章,我是新手,请耐心回答我的帖子

我已经创建了以下表单,它在提交时显示消息。如果表单已成功提交,则会显示一条消息,而不会刷新页面,如下图所示:

表格


消息

谢谢,我们会回复你的 哎呀……出了点问题
JQUERY

  $(function(){
        $("#contact-form").submit(function(e){
        e.preventDefault(); 

        $form = $(this);

        $.post(document.location.url, $(this).serialize(), function(data){
            $feedback = $("<div>").html(data).find(".form-feedback").hide();
            $form.prepend($feedback)[0].reset();
            $feedback.fadeIn(1500)
        })

        });
    })
$(函数(){
$(“#联系表格”)。提交(功能(e){
e、 预防默认值();
$form=$(此项);
$.post(document.location.url,$(this).serialize(),函数(数据){
$feedback=$(“”).html(数据).find(“.form feedback”).hide();
$form.prepend($feedback)[0].reset();
$feedback.fadeIn(1500)
})
});
})
我想做什么

从文本字段消息中检索值并将其分配给php变量

我的问题

 <?php
     if(isset($_POST['contact'])){
        $message = $_POST['msg'];
        echo $message; 
     }
     ?>  
当我尝试使用以下代码检索message的值时,什么也没有发生:

表单下方的PHP代码

 <?php
     if(isset($_POST['contact'])){
        $message = $_POST['msg'];
        echo $message; 
     }
     ?>  

我对阿贾克斯很陌生,所以我想我在这里做错了什么,不幸的是我不知道我哪里做错了,所以我希望有人能让我走上正确的道路


提前感谢

问题是您使用的是ajax,它不会导致页面刷新,然后尝试回显发布的变量,因为没有页面刷新,php不会再次处理页面以回显发布的变量

我的解决方案是使用javascript显示输入的文本,然后使用php将其存入数据库

举个例子,

$(document).ready(function () {
    $(".button").click(function () {
        $('p').text($('#msg').val());
    });
});

如果您只想在页面上显示ajax,则不需要ajax。如果您计划保存在数据库中,则需要ajax。

Hanoncs的建议会起作用,但只在浏览器端保存内容(通过仅从表单到div显示消息),这将始终给用户留下消息是在服务器端发送(处理)的印象,但情况并非总是如此,可以让php在使用javascript显示它之前返回它。因此,我建议采用另一种方法:

首先,对关注点进行分离:向同一当前页面发送POST HTTP请求在某种程度上违背了AJAX的目的。HTTP响应将包含所有页面(PHP呈现的HTML、用于模板制作的嵌入HTML,如果脚本没有加入到脚本标记中,则可能包含脚本)。相反,我建议您创建一个单独的小php文件,只负责呈现所需的标记。因此,我们不使用
$.post(document.location.url..
,而是使用
$.post('pathtosmallphfile')..


第二,让jQuery AJAX函数接受回调或使用承诺。我建议您仔细阅读以下内容,jQuery将消息值发布到php文件的代码如下所示:

$('contact#btn')。单击(函数(事件){
event.preventDefault();
var url=“url/of/the/php/page/where/to/process/data”;
var data=$(“#msg_box”).val();
var wrapper=$(“#wrapper”);
$.ajax({
类型:“POST”,
url:url,
数据:数据,
成功:功能(响应){
html(“来自页面的响应是”+响应);
},
错误:函数(xhr、状态、消息){
//在这里处理错误
}
});
});

消息

谢谢,我们会回复你的 哎呀……出了点问题
在您的情况下不需要这样做,但将
方法“post”>
更改为
方法=“post”>

改变你的形式

<form name="message-form" action="" id="contact-form" method="""post">
      Message<br /> <input type="text" name="msg" value="" /><br />
    <input type="submit" value="Contact Us" name="contact" class="buttono" />
</form>
<div class="form-feedback" style="display:none">    </div>

这是同一页面上的最后一个代码吗?在网络选项卡上的chrome dev tools中,当你点击时,你会看到该页面的帖子吗?@Hanoncs当我使用firbug时,我会看到文本框和PHP
$msg
变量的值,但它在页面上没有回音…?Whyok,所以你会看到消息:“无论你输入了什么”?这应该可以工作。你使用的IDE是什么?是的,这是正确的,我唯一的问题是,当我做
echo$msg
时,输入的值不会在页面上得到回显,但我可以在控制台网络选项卡中看到
$msg
的值…没有伴侣,但我需要避免页面刷新…所以我必须使用AjAX,必须有一些其他解决方案来帮助思考s、 你可以避免这种情况。你可以使用javascript将$msg中的文本设置为。你甚至不需要ajax来完成你要做的事情。他没有说他想保存在数据库中。
$(function () {
    $("#contact-form").submit(function (e) {
        e.preventDefault();
        $form = $(this);
        $.post(
                document.location.url,
                $(this).serialize(),
                function (data) {
                    $(".form-feedback").html("Your msge " + data + " is recieved and we will get back soon");
                    $(".form-feedback").show();
                })

    });
});