它回声“空”..请帮忙,我找不到问题! 两者都是由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
}
的Ajax:
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的情况下完成的。现在它有效。任何提示,这行出了什么问题?
答案 0 :(得分: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。
答案 1 :(得分:0)
xmlhttp.send();
此行发送请求但不发送任何数据。
var data = {"foo":"bar"};//Get this from the form.
xmlhttp.send(data);
JQuery提供了一种将表单转换为变量的好方法:
var data = $( "#form_id" ).serialize();
其他图书馆也可能有这个。如果您不想使用库,可以通过循环表单元素手动构建数组。