0

它回显“空”..请帮助,我找不到问题!它们都由 AJAX 调用。第一个代码在表中创建一个新的 TR。我想使用 addnewTape() 函数将数据发送到另一个 php。但是 POST 数组是空的。

将新 TR 放入表中 (newtapeTR.php):

echo "<form id='tapeform".$_SESSION['newtape']."' method='POST' action=''>";
echo "<td> <input type='text' value='".$_SESSION['newtape']."' name='tapeid' readonly style='width: 25px;'></td>";
echo "<td> <input type='text' placeholder='citation' name='tapetext' style='width: 625px;'> </td>";
echo "<td id='tapeadd".$_SESSION['newtape']."' colspan='2'> <input type='button' onClick='addnewTape(".$_SESSION['newtape'].");' value='Add' class='button' ></td>";
echo "</form>";

表单提交,带有 AJAX 函数(示例:) addnewTape(32) newtape.php:

if (empty($_POST)) 
{
echo "empty";
}
else 
{
$tapeid = $_POST['tapeid']; //this should be 32
$tapetext = $_POST['tapetext']; //this should be some text
}

阿贾克斯:

function addtapeTR(){ 
    var xmlhttp; 
    var tapetableRef = document.getElementById('tapetitle'); 
    if (window.XMLHttpRequest) { 
        xmlhttp = new XMLHttpRequest(); 
    } else { 
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange = function() { 
            if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
                var newRow = tapetableRef.insertRow(-1); 
                var lastRowIndex = tapetableRef.rows.length-1; 
                var newID = lastRowIndex-1; 
                newID++; 
                newRow.id = "tape"+newID; 
                newRow.innerHTML=xmlhttp.responseText; 
            } 
    } 
    xmlhttp.open("POST","menu-main/menu-setting-submenu/newtapeTR.php",true);       
    xmlhttp.send(); 
}

这个 ajax 调用 newtape.php,并发送 id 和文本:

function addnewTape(id) {
    var id = id-1;

    if (tapeid[id].value=="" || tapetext[id].value=="") {
        alert('Empty field!');
    } else {
        $.ajax({ 
            type: "POST",
            url: "menu-main/menu-setting-submenu/newtape.php",
            data: $("#tapeform"+(id+1)).serialize(),
            success: function(data){
            $("#tape"+(id+1)).html(data);
            }
        });
    }
}

回答:这里的数据出了点问题:

data: $("#tapeform"+(id+1)).serialize(),

我在没有 jQuery 和 GET 的情况下做到了。现在它起作用了。任何提示,这条线出了什么问题?

4

2 回答 2

0

数组中有两个元素,这绝对不意味着数组为空。作为一种快速解决方法,您可以执行以下操作:

$errors = array_filter($_POST);

if (empty($errors)) {
echo "empty";
}
else 
{
$tapeid = $_POST['tapeid']; //this should be 32
$tapetext = $_POST['tapetext']; //this should be some text
}

array_filter() 函数的默认行为将删除数组中等于 null、0、'' 或 false 的所有值

否则,在您的特定情况下,如果至少有一个元素,即使具有“空”值,empty() 构造也将始终返回 true。

于 2013-07-01T13:02:03.040 回答
0
xmlhttp.send();

此行发送请求,但不发送任何数据。

var data = {"foo":"bar"};//Get this from the form.
xmlhttp.send(data);

JQuery 提供了一种将表单转换为变量的好方法:

var data = $( "#form_id" ).serialize();

其他图书馆可能也有这个。如果您不想使用库,则可以通过遍历表单元素来手动构建数组。

于 2013-07-01T13:12:59.317 回答