将变量从Javascript / JQuery传递给PHP

时间:2012-10-30 17:50:46

标签: php jquery ajax variables

我还是JQuery的新手,并试图学习如何在没有页面刷新的情况下提交表单... 我想要的是,当提交表单时,我在“标题”和“子标题”上键入的值可以传递给php变量(所以我可以回显/插入数据到数据库等)

所以,我把

"<? echo $_POST['headline']; ?>" 

on

<span class="save-notice">Your change has been saved! <? echo $_POST['headline']; ?></span>

但是当我填写表单并单击“提交”按钮时,它只显示“您的更改已保存!”。这意味着,变量无法传递给PHP。

HTML和JS合并为1个文件。我在.ajax上保留了URL方法,因为它是在同一个文件中处理的。

HTML表格

<div id="submit-form">
<form action="" id="select-block" class="general-form">
<div class="input-wrap">
    <input class="clearme" name="Headline" value="Your headline here" id="headline"/>
</div>
<div class="input-wrap">
    <textarea class="clearme" name="Sub-Headline" id="subheadline">Sub Headline Here</textarea>
</div>

<input type="submit" class="submit-btn" value="SAVE" />
<span class="save-notice">Your change has been saved! <? echo $_POST['headline']; ?></span>
</form>
</div>

和JQUERY CODE

<script type="text/javascript">

$(function() {  
  $(".save-notice").hide();
  $(".submit-btn").click(function() {  

    var headline = $("input#headline").val();
    var subheadline = $("textarea#subheadline").val();
    var dataString = 'headline='+ headline + '&subheadline=' + subheadline;
    alert(dataString)


        $(".save-notice").hide();
        $.ajax({  
        type: "POST",  
        url: "",
        data: dataString,
        success: function() {  
            $(".save-notice").show();
        }  
    });  
return false;  
  });  
});  

</script>

我在互联网上看到了几个示例/教程,如果可以这样做的话。你能建议吗?

4 个答案:

答案 0 :(得分:2)

请参阅 http://api.jquery.com/serialize/

而不是添加代码来单击处理程序

$(".submit-btn").click(function() { ...  }

使用提交处理程序

$("#select-block").submit(function() {  
// your code
  var dataString = $(this).serialize();

});

答案 1 :(得分:0)

加载页面时生成$_POST['headline']中的save-notice。 PHP运行并输出一个HTML文件。

当您发出AJAX请求时,返回到AJAX调用的页面将包含您的新值,但当前页面不包含。

您可以发布到其他页面,让该页面返回一个值,然后使用JavaScript更改div的值。

或者,您可以尝试从返回的HTML页面中提取数据。

$(".save-notice").hide();
$.ajax({
    type: "POST",
    url: "",
    data: dataString,
    dataType: 'html', // the page returned
    success: function(data) {
        // get the data from the returned page
        $(".save-notice").html($('.save-notice', data).html());
        $(".save-notice").show();
    }
});

答案 2 :(得分:0)

您已经拥有javascript变量中的值:

var headline = $("input#headline").val();
var subheadline = $("textarea#subheadline").val();

您可以这样做:

$.ajax({
    type: "POST",
    url: "foo.php",
    data: {headline: headline, subheadline: subheadline},
        success: function() {
            $(".save-notice").show();
        }
});

或者像这样:

$.post("foo.php", { headline: headline, subheadline: subheadline }, 
    function(data) {
        $(".save-notice").show();
    }
);

您可以看到,数据在键值对中传递: { headline: headline, subheadline: subheadline }

您可以使用$_POST$_POST['headline']

$_POST['subheadline']来访问它

答案 3 :(得分:0)

使用Firebug的控制台功能,您可以看到服务器对您的AJAX调用的响应。响应是按照你想要的那样评估$ _POST var,但是由于AJAX调用发生在幕后,你没有看到它。

要使您的脚本无需进行太多修改即可运行,请尝试此操作(无需PHP):

  1. <? echo $_POST['headline']; ?>替换为<span id="yourheadline"><span>
  2. $('#yourheadline').html(headline);
  3. 之前的行上插入$(".save-notice").show();

    我建议的另一件事是序列化你的表单以创建dataString var,而不是通过输入进行输入。如果您的输入名为headlinesubheadline而不是HeadlineSub-Headline ...

    var dataString = $("#select-block").serialize();
    

    ...将完成同样的事情:

    var headline = $("input#headline").val();
    var subheadline = $("textarea#subheadline").val();
    var dataString = 'headline='+ headline + '&subheadline=' + subheadline;