我有两个文件,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帖子和文章,试图复制推荐的内容,但仍然无法做到这一点。
我是在做某些完全错误的事情,还是试图以不打算使用这些方法的方式使用这些方法?
答案 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">