2013-07-01 3 views
0

Это эхо "пустой" .. пожалуйста, помогите, я не могу найти проблему! Оба они называются AJAX. Первый код создает новый TR в таблицу. Я хотел бы отправить данные на другой php с помощью функции addnewTape(). Но массив POST пуст.форма не отправляет данные с почтовым методом

Новый ТР в таблицу (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(); 
} 

Этот Аякса называет newtape.php, и посылает идентификатор и текст:

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. Теперь это работает. Какие-нибудь советы, что пошло не так в этой строке?

+1

Можете ли вы показать нам свой AJAX? – casraf

+0

Я бы проверил '$ _GET', если ajax отправляет запрос GET. – Jim

+0

извините, это немного длиннее. Джим, $ _GET также пуст. – ppeter

ответ

0
xmlhttp.send(); 

Эта строка отправляет запрос, но не отправляет никаких данных вместе с ним.

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

JQuery обеспечивает хороший способ для преобразования формы переменной:

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

Другие библиотеки, вероятно, это тоже. Если вы не хотите использовать библиотеку, вы можете создать массив вручную, перейдя по элементам форм.

+0

Он не должен отправлять данные, он только создает новую строку в таблице. Я добавил ajax, который вызывает newtape.php, которому нужны данные – ppeter

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() поведение по умолчанию функции будет удалить все значения из массива, которые равны нуль, 0, «» или ложный

иначе в вашем конкретном случае пустой() всегда будет возвращать true, если есть хотя бы один элемент, даже с «пустым» значением.

+1

'empty()' будет возвращать true только для массива, если в массиве нет элементов. – Jim

+0

Спасибо, что выделил мою ошибку .. !! –

+0

этот код сделал $ tapeid и $ tapetext undefined – ppeter

Смежные вопросы