嘿伙计我需要我的AJAX结果才能在我的FORM中添加字段,或者添加一个SUBMIT按钮来完成表单。
我的AJAX结果显示在标准HTML表单(来自PHP文件)内的DIV中。在FORM标签内返回时,AJAX结果(例如,隐藏的输入)是否可以包含在FORM POST ??
中我正在使用一个标准的JavaScript(改编自“livesearch”发布的一个)来从AJAXresults.php获取AJAX结果,这可以正常工作 - 我的AJAX结果返回OK,只是我的表单不起作用! javascript是:
function showResult(str)
{
if (str.length<4)
{
document.getElementById("suburbmatch").innerHTML="Type more than 4 letters...";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("suburbmatch").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","AJAXresults.php?suburbtext="+str,true);
xmlhttp.send();
}
myphp.php包含如下形式:(注意加载AJAX结果的DIV,在FORM标签内)
<form action="myphp.php" method="POST">
<input type="text" name="addressline1">
<input type="text" name="addressline2">
<input type="text" name="suburb" onkeyup="showResult(this.value)">
<div id=suburbmatch></div> // AJAX results display here
</form>
AJAXresults.php包含一个查询数据库然后将结果作为隐藏输入字段和SUBMIT按钮返回的脚本:
echo ('<input type="hidden" name="suburbID" value="'.$row['ID'].'">');
echo ('<input type="submit" name="submit" value="');
echo ($row['suburb'].' '.$row['state'].' '.$row['zipcode']);
echo ('"><br>');
此代码位于WHILE循环中,因此匹配输入myphp.php上“郊区”文本输入的文本的“郊区”会加载为显示郊区/州/邮政编码的按钮。单击它时,它应该在myphp.php上提交整个表单,包括AJAX结果中隐藏的INPUT。
我可以将结果作为文本返回并使用$ _GET超链接数据,例如:(a href = myphp.php?result = x)但是它会刷新页面并重置其他表单值:P
答案 0 :(得分:1)
答案是肯定的!
使用 AJAX ,JavaScript可以获取 HTML表单元素(如SUBMIT按钮或隐藏的INPUT),甚至更好的结构化数据(例如对象,如JSON string)然后创建表单元素,并将它们添加到HTML / PHP表单中。
仅供记录,这就是我解决问题的方法:
首先,我使用$.get()
而不是XMLHttpRequest
切换到jQuery来处理AJAX函数。这使我能够处理其他优点之类的错误,例如更好的跨浏览器兼容性。
关于在表单中添加元素,我实际需要的是用户输入,以便在表单之前选择匹配的地址 发送(无论如何发送表单 - 以后我确实会使用AJAX来执行此功能,使用$.post()
)。用户从匹配地址列表中选择正确的地址后,将创建隐藏输入(使用匹配的地址ID号),并显示 SUBMIT 按钮,以便用户可以提交表格。
更多细节......
当用户键入郊区字段时,JavaScript函数showResult()
会被触发onKeyUp
,并返回匹配地址列表:
// AJAXresults.php code in the WHILE loop:
echo '<li onclick="chooseThisAddress('.$row['ID'].')">'.$row['street'].', '.
$row['suburb'].' '.$row['state'].' '.$row['zipcode'].'</li>';
// which will output, in this example:
<li onclick="chooseThisAddress(64412)">1 Market St, Sydenham NSW 2044</li>
<li onclick="chooseThisAddress(64373)">1 Market St, Sydney NSW 2000</li>
用户点击正确的地址,并触发一个新的函数chooseThisAddress()
(传递给它的地址ID号),它只是隐藏地址匹配列表,然后创建隐藏的输入(例如:<input type="hidden" name="addressID" value="64412">
)和 SUBMIT 按钮,都使用jQuery的.append()
方法(将新的表单元素附加到表单中)。
那么原来的问题是什么?
简单地说,从用户的角度来看,我正在考虑表单的工作方式让我想到让AJAX返回一堆提交按钮。既然如此,我发现了很多不同的方法,但这就是我最终完成它的方式,以便它既实用又具有视觉吸引力。
答案 1 :(得分:0)
为什么不通过ajax提交此表单。这应该可以解决你的刷新问题
答案 2 :(得分:0)
问题是你要回来了
echo ('<input type="hidden" name="suburbID" value="'.$row['ID'].'">');
WHILE循环中的。这意味着您将拥有多个具有相同name="suburbID"
和不同值的html元素。
当您提交表单时,您将始终获得最后一个将覆盖其他人的值的值。