无法使用PHP变量填充输入值

时间:2013-08-13 20:53:20

标签: php html ajax

我有两个文件,landing.php和test.php。 Landing.php有一个表单,通过ajax使用post方法提交到test.php。如果ajax调用成功,浏览器会加载test.php,此时我遇到了问题。在尝试显示发送到test.php的帖子数据的值时,我无法弄清楚我做错了什么。

以下是来自landing.php的ajax调用。我有理由相信,通过查看Firebug中的帖子数据,这是正常的。

$('#searchForm').submit(function(e) {
    e.preventDefault();
    var data1 = $('#checkBoxDiv input').serialize() + '&' + 'barcodeID=' + $('#barcodeID').val();
    $.ajax({
        url: 'test.php',
        data: data1,
        type: 'POST',
        success: function() {
            window.location.href = "test.php";
        }
    });  
});  

以下是test.php的内容。

<?php

$bar = $_POST['barcodeID'];

echo "<html>";
echo "<body>";
echo "<p>*" . $bar . "*</p>";
echo "</body>";
echo "</html>";
?>

如果我使用test.php中的<p>取出星号,当我在浏览器中到达test.php时,我会看到一个完全空白的屏幕。然而,在那里,我在屏幕上显示“**”。然而,最令人困惑的部分是,如果我包括

echo $bar;

在test.php中,我在帖子数据查看器的Firebug响应选项卡中看到了$bar(00-00102 - 完全一样)的值。

经过一些研究,我读到当你不想在URL栏中显示查询字符串时,帖子是你选择的方法,以及当你有大量数据要发送时使用的方法(对我来说就是这样,当说完所有的时候,最终会有大约五到六百个字符)。我查看了其他stackoverflow帖子和文章,试图复制推荐的内容,但仍然无法做到这一点。

我是在做某些完全错误的事情,还是试图以不打算使用这些方法的方式使用这些方法?

5 个答案:

答案 0 :(得分:2)

请勿在ajax调用成功时更改窗口位置。电话会将数据发布到test.php,您将收到回复。然后,您将重定向到带有空白帖子的页面,这会产生星号。

如果您只想显示test.php的结果,请将$.ajax来电更改为以下内容:

$.ajax({
    url: 'test.php',
    data: data1,
    type: 'POST',
    success: function(response) {
        $('html').replaceWith(response);
    }
});

或者,如果您确实想要更改页面,请忘记ajax,然后将表单发布到test.php

答案 1 :(得分:2)

您在AJAX成功后重新加载窗口,此时没有POST信息。

你可以这样做:

$('#searchForm').submit(function(e) {
    e.preventDefault();
    var data1 = $('#checkBoxDiv input').serialize() + '&' + 'barcodeID=' + $('#barcodeID').val();
    $.ajax({
        url: 'test.php', // <-- POST exists during this call
        data: data1,
        type: 'POST',
        dataType: 'html',
        success: function(data) {
            $('html').replaceWith(data);
        }
    });  
});  

答案 2 :(得分:1)

AJAX POST将在一个回合中完成。这意味着,您发布到test.php的值 通过ajax只会通过该请求出现。你正在做的是,你在收到test.php的响应后重定向到test.php。这是一个新请求,它没有任何POST值。因此,$_POST['barcodeID'];

中没有任何内容

此外,在您的代码中,您有$('#barcodeID')。val()两次。尝试删除最后一个。:

var data1 = $('#checkBoxDiv input').serialize() + '&' + 'barcodeID=' + 
    $('#barcodeID').val();
    $('#barcodeID').val();

答案 3 :(得分:1)

您将变量作为POST请求传递给test.php文件,这意味着test.php文件将获取该数据并对其进行操作。然后在成功完成该请求之后,您将重定向到test.php而不传递任何变量。

如果你真的想提交一份表格(附带重定向),请使用html:

<form action="test.php" method="post">
    <input type="text" name="barcodeID" />
</form>

如果您不需要重定向,请执行其他人建议的操作并在同一页面上显示输出(someDiv是您希望显示test.php响应的html元素):

$('#searchForm').submit(function(e) {
    e.preventDefault();
    var data = $('#checkBoxDiv input').serialize() + '&' + 'barcodeID=' + $('#barcodeID').val();

    $.post('test.php', data, function(response) {
        $('someDiv').html(response);
    });
});

如果您必须使用JavaScript和重定向,请将隐藏的虚拟表单附加到页面并提交:

$('<form action="test.php" method="post">' +
    '<input type="hidden" name="barcodeID" value="123456789" />' +
    '</form>')
    .appendTo('body')
    .submit();

答案 4 :(得分:1)

如果您尝试使用AJAX将表单内容替换为表单提交到test.php的结果,那么您需要将landing.php中的AJAX调用更改为:

$.ajax({
    url: 'test.php',
    data: data1,
    type: 'POST',
    success: function(response) {
        $('html').replaceWith(response);
    }
});

否则我建议不要使用AJAX,只需通过设置表单的action属性来使用HTML进行常规表单提交:

<form method="post" action="test.php">