PHP多表单和Ajax
我已经编写了一个小脚本,它通常运行良好,只需要一个小补丁和一些Ajax代码。基本上,它在每个输出行中附加了几个表单。提交工作正常,2个帖子和1个GET。但是我希望它在不刷新页面的情况下发生,因为Ajax代码。我试着和一些人混在一起,但多个变量让这成为一场噩梦。以下是完整代码,首先是主页:PHP多表单和Ajax,php,ajax,forms,Php,Ajax,Forms,我已经编写了一个小脚本,它通常运行良好,只需要一个小补丁和一些Ajax代码。基本上,它在每个输出行中附加了几个表单。提交工作正常,2个帖子和1个GET。但是我希望它在不刷新页面的情况下发生,因为Ajax代码。我试着和一些人混在一起,但多个变量让这成为一场噩梦。以下是完整代码,首先是主页: <html> <head> <title></title> </head> <body> <?php $lines = file(
<html>
<head>
<title></title>
</head>
<body>
<?php
$lines = file('file.txt');
foreach ($lines as $line) {
$field = explode("|", $line);
$name = $field[0];
$id = $field[4];
echo $name . '<br>';?>
<form method="post" action="submit-here.php?id=<?php echo $id;?>">
<select name="FORM1" size="3">
<option value="Value-1">Value-1</option>
<option value="Value-2">Value-2</option>
<option value="Value-3">Value-3</option></select>
<select name="FORM2" size="3">
<option value="Value-4">Value-4</option>
<option value="Value-5">Value-5</option>
<option value="Value-6">Value-6</option></select>
<br><br><input type="submit" value="submit" name="submit">
</form>
<?php
}
?>
</body>
</html>
多表格部分:
这对我很有用:
<html>
<head>
<title></title>
</head>
<body>
<?php
$lines = file('test.txt');
$count=0;
foreach ($lines as $line) {
$field = explode("|", $line);
if (count($field) > 2) {
//only print the form if there is real data
print_form($field, $count);
$count++;
}
}
?>
</body>
</html>
<?php
function print_form($field, $num) {
$name = $field[0];
$id = $field[4];
echo $name . '<br>';?>
<form method="post" action="submit-here.php">
<input type="hidden" id="id_<?=$num?>" value="<?php echo $id;?>">
<select id="sel1_<?=$num?>" name="FORM1" size="3">
<option value="Value-1">Value-1</option>
<option value="Value-2">Value-2</option>
<option value="Value-3">Value-3</option></select>
<select id="sel2_<?=$num?>" name="FORM2" size="3">
<option value="Value-4">Value-4</option>
<option value="Value-5">Value-5</option>
<option value="Value-6">Value-6</option></select>
<br><br>
<input type="button" value="submit" name="submit" onClick="submitForm(<?=$num?>);">
</form>
<?php
}
AJAX部分
在html头中,添加以下脚本块:
<script language="JavaScript" type="text/JavaScript">
<!--
function submitForm(num) {
//issue AJAX request
var data = "FORM1="+document.getElementById("sel1_"+num);
data = data+"&FORM2="+docucument.getElementById("sel2_"+num);
data = data+"&id="+document.getElementByID("id_"+num);
var request = getXmlHttpObject();
request.onreadystatechange =
function() { if(request.readyState == 4 && request.status == 200)
alert("Form received."); };
request.open("POST", "submit-here.php", true);
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
request.send(data);
}
function getXmlHttpObject()
{
if (window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
return new XMLHttpRequest();
}
if (window.ActiveXObject)
{
// code for IE6, IE5
return new ActiveXObject("Microsoft.XMLHTTP");
}
return null;
}
//-->
</script>
你能展示一下如果语句和/或preg_替换了你尝试过的调用会怎么样吗?亲爱的,这也帮我摆脱了幽灵代码,谢谢!你知道我如何让Ajax也在那里工作吗?多实例的事情让我很痛苦,只刷新当前活动的提交。我需要更多地了解您正在尝试做什么…我目前没有看到任何AJAX代码。非常简单,实际上,只需要每次提交后不进行通常的整页刷新,可能会从submit-here.php.Ok返回一个Post-Received确认,并使用示例AJAX功能进行更新。我不得不修改一些关于php生成的表单的内容,以便AJAX可以引用唯一的ID,因此请确保您也包括对代码的更改。我更新了代码并按照您的说明添加了AJAX块,整个页面刷新已经消失,但现在没有任何内容传递到submit-here.php,我不确定这是否是由于新旧代码冲突造成的,因此我编辑了我的原始帖子,以包含submit-here.php的代码
<script language="JavaScript" type="text/JavaScript">
<!--
function submitForm(num) {
//issue AJAX request
var data = "FORM1="+document.getElementById("sel1_"+num);
data = data+"&FORM2="+docucument.getElementById("sel2_"+num);
data = data+"&id="+document.getElementByID("id_"+num);
var request = getXmlHttpObject();
request.onreadystatechange =
function() { if(request.readyState == 4 && request.status == 200)
alert("Form received."); };
request.open("POST", "submit-here.php", true);
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
request.send(data);
}
function getXmlHttpObject()
{
if (window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
return new XMLHttpRequest();
}
if (window.ActiveXObject)
{
// code for IE6, IE5
return new ActiveXObject("Microsoft.XMLHTTP");
}
return null;
}
//-->
</script>