【问题标题】:PHP form produced by ajax not workingajax生成的PHP表单不起作用
【发布时间】:2013-08-29 16:54:31
【问题描述】:

我有一个显示表格的页面,并且在每个表格行中嵌入一个表单,该表单从下拉菜单中提交一些数据。我正在使用 AJAX 生成页面。以下是我在 php 页面中回显的内容。

echo "<table id=\"comp\">";
echo "<tr> 
<th> CID </th>
<th> USERNAME </th>
<th> NAME </th>
<th> DESCRIPTION </th>
<th> ADDRESS </th>
<th> PHONE </th>
<th> DATE </th>
<th>Choose JE</th>
<th></th>
</tr>";
for($i=0;$i<$count;$i++)
{
   $c = mysql_result($result, $i, 'cid');
echo "<form name=\"$i\" action=\"je_select.php\" method=\"post\">
<tr id=\"$i\">";
echo "<td>".$c."</td>";
echo "<td>".mysql_result($result, $i, 'uname')."</td>";
echo "<td>".mysql_result($result, $i, 'name')."</td>";
echo "<td>".mysql_result($result, $i, 'desc')."</td>";
echo "<td>".mysql_result($result, $i, 'address')."</td>";
echo "<td>".mysql_result($result, $i, 'phone')."</td>";
echo "<td>".mysql_result($result, $i, 'date')."</td>";

echo "<td>$dropdown</td>";
echo "<td><input type=\"hidden\" name=\"cid\" value=\"$c\"/><input type=\"submit\" value=\"Forward\"/></td>";
    echo "</tr></form>";
}       
echo "</table>";

现在的问题是表单显示正常,但单击提交按钮时表单没有提交。它根本什么都不做。虽然我的另一个项目中的类似代码工作得很好。

请帮我解决这个问题。我被困住了,我需要尽快完成这个项目。

编辑

我尝试为此打开源代码。我看到的是表单标签在它打开的地方关闭:

<form name=\"$i\" action=\"je_select.php\" method=\"post\"></form>

为什么会这样??我也看到了帖子:Form Issue (closing itself early in table)

我在“tr”标签之前打开了表单标签,但它仍然不起作用。

更多

我注意到的另一件事是,在 AJAX 页面的源代码中,由于无法解释的原因,该表还有一个 tbody 标记。虽然 tbody 标签也出现在我的一个较旧的项目中,但在那里也有类似的东西。请帮帮我。

AJAX 功能

要点击的链接:

    <div id="choices">
        <ul id="clist">
            <a href="#" onclick="ajax(1);"><li>Pending Complaints</li></a>
            <a href="#" onclick="ajax(2);" ><li>Handled Complaints</li></a>
            <a href="logout.php" ><li>Logout</li></a>
            <div class="clear"></div>
        </ul>
    </div>

函数ajax:

        function ajax(val) {
        var xmlhttp;
        if (active != val) {
        active = val;
        if (window.XMLHttpRequest)
        {
            xmlhttp=new XMLHttpRequest();
        }
        else
        { 
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }

        if (xhr) {
            xhr.abort();
        }
        xhr = xmlhttp;
        xmlhttp.onreadystatechange=function()
        {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {

            document.getElementById("content").innerHTML=xmlhttp.responseText;
            document.getElementById("banner").innerHTML=arr[val - 1];
        }
        }
            xmlhttp.open("GET","dispcae.php?&s="+val , true);
        xmlhttp.send(); 
    }
}

【问题讨论】:

  • 您是否尝试过将表单从 Ajax 中剥离出来并自行测试?一些基本的问题解决尝试不会在这里错过......
  • @FDL:你试过了,它在那里工作。事实上,我实际上在做的是当用户打开页面时,默认情况下他会看到这个表。但如果他选择其他菜单项,则使用 ajax 打开这些菜单项,包括此表。
  • 您正在回显多个表单,因为它包含在循环中
  • @shadow:是的,但都有不同的名称,正如我所说,类似的事情适用于我的另一个项目,也适用于这个项目的非 ajax 生成页面。
  • 您不应该以数字开头的表单名称,这不是一个好习惯

标签: php javascript ajax forms html-table


【解决方案1】:

Ajax 响应不是valid HTML。表格不能包裹在 table/tr/td/th 中。

尝试重构 HTML,并使用 Form 环绕表格。

看看这个类似的Q&A

【讨论】:

    【解决方案2】:

    我的猜测来自您的数据库的数据有引号(单引号或双引号),这会破坏浏览器中的呈现,并且您在没有实际进入的情况下关闭,并且由于表单内没有提交按钮,它不会做任何事情。

    将虚拟数据放入数据库中,不带任何引号并检查

    【讨论】:

    • 不,数据没有任何引号,而且它在没有 ajax 的情况下使用相同的数据
    • 将渲染的html从
      开始发布到
      结束标签
    • 在呈现的 html 中,表单标签立即关闭:
    • @TapanAnand 你能放一个虚拟文本而不是输入元素,看看你是否在表单标签中得到那个虚拟文本
    • 它被立即关闭,因为它不是一个有效的 HTML。
    猜你喜欢
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多