2016-10-05 346 views
1

我有一個jQuery AJAX post和PHP的問題。我在jquery ajax post和php中遇到了一些麻煩

我嘗試使用.serialize()發送數據並添加一些附加數據。

但在PHP中,我收到.serialize()數據但沒有附加數據。

在我的代碼jQuery的阿賈克斯,

  function load() { 
      var form_data = $('#frm2').serialize(); 
      form_data.push({name:'year',value:'2016'}); 
      alert(form_data); 
      $.ajax({ 
       type : "POST", 
       url : "insert.php", 
       cache : false, 
       async : false, 
       data : form_data, 

       success : function(html) { 
        alert(form_data); 
       } 
      }); 
      } 

和FRM2(形式的ID)是:

  <form name='frm2' action="./BOMinsert.php" id = 'frm2' method='post'> 
      <table width="30%" id="keytable" style="border: 1px gray solid; table-layout: fixed"> 
       <thead style="background: #EAEAEA"> 
        <th>year</th> 
        <th>brand</th> 
        <th>season</th> 
        <th>Styleno</th> 
       </thead> 
       <tbody style="text-align: center"> 
        <?php 
        for($i =1;$i<5;$i++) 
         echo "<td>".$_POST['name'.$i]."</td>"; 
        ?> 
       </tbody> 
      </table> 
      <BR> 
      <BR> 
      <table id="bomtable" style="width: 100%;table-layout: fixed"> 
       <thead style="background: #EAEAEA"> 
        <th>item1</th> 
        <th>item2</th> 
        <th>item3</th> 
        <th>item4</th>       
        <th>item5</th> 
        <th>item6</th> 
        <th>item7</th> 
        <th>item8</th> 
        <th>item9</th> 
        <th>item10</th> 
        <th>item11</th> 
        <th>item12</th> 
       </thead> 
       <tbody style="text-align: center"> 
        <?php echo "<td>".$_POST['name5']."</td>" ?> 
        <?php echo "<td>".$_POST['name6']."</td>"?> 
        <?php echo "<td>".$_POST['name7']."</td>"?> 
        <td><input type="text" class="ui-widget ui-corner-all" name='item' size="5" maxlength="10"/></td> 
        <td><input type="text" class="ui-widget ui-corner-all" name='description' size="8" maxlength="30"/></td> 
        <td><input type="text" class="ui-widget ui-corner-all" name='supplycompany' size="5" maxlength="10"/></td> 
        <td><input type="text" class="ui-widget ui-corner-all" name='colorway' size="5" maxlength="10"/></td> 
        <td><input type="text" class="ui-widget ui-corner-all" name='unit' size="5" maxlength="10"/></td> 
        <td><input type="text" class="ui-widget ui-corner-all" name='size' size="5" maxlength="10"/></td> 
        <td><input type="text" class="ui-widget ui-corner-all" name='consume' size="5" maxlength="10"/></td> 
        <td><input type="text" class="ui-widget ui-corner-all" name='unit' size="5" maxlength="10"/></td> 
        <td><input type="text" class="ui-widget ui-corner-all" name='etc'/></td> 
       </tbody> 
       <input type='submit' value='save' class="ui-button ui-widget ui-corner-all" style="background: #3498DB; color: white;float: right" onclick="load();"> 
      </form> 

,最後我的PHP代碼:

if(isset($_POST['year'])){ 
    echo $_POST['year']; 
    }else{ 
    var_dump($_POST); 
    } 

PHP結果:

array(8) { ["item"]=> string(0) "" ["description"]=> string(0) "" ["supplycompany"]=> string(0) "" ["colorway"]=> string(0) "" ["unit"]=> string(0) "" ["size"]=> string(0) "" ["consume"]=> string(0) "" ["etc"]=> string(0) "" } 
Notice: Undefined index: year in C:\Apache24\htdocs\ptest\BOMinsert.php on line 19 

p.s.我也試過.serializeArray(),.push(),.serialize()+"&year=2016"

以上測試代碼但不起作用。

+0

這可能與最後一張桌子未關閉有關嗎? – adeneo

+0

此外,提交似乎提交表格,沒有什麼阻止它 – adeneo

回答

0

爲什麼不添加一個隱藏的字段到您的表單中,需要傳遞的名稱和值?

<input type="hidden" name="year" value="2016" /> 

更新爲使用動態年份值:

<input type="hidden" name="year" value="<?php echo $_POST['name1']; ?>" /> 
+0

其實,年值是動態的。所以,我從之前的頁面拿來。並在html頁面打印出年份值。 –

+0

是的,我檢查了你的表單代碼,可以找到年份變量。但你仍然可以使用隱藏的領域。我已經相應地更新了我的答案。 –

+0

哦,它的工作原理。謝謝:) –

1

首先,服務器端PHP代碼低於..

<?php 

if(isset($_POST['year'])){ 

    #Now the POST['year'] Request is available to be checked; 
    #Go ahead and try it.. 

    $data=$_POST['year']; 
    echo $data; 
    exit; 
} 
?> 

而使用url簡單treak它

<script> 
    function load() { 
     var form_data = $('#frm2').serialize(); 
     var year='2016'; 
     //As you can see this will work perfectly and is already tested! 
     //Just append the required values to the url ((in Url form like below)) and it will send everything to the same page 


     $.ajax({ 
      type : "POST", 
      url : "demo.php?year="+year, 
      cache : false, 
      async : true,//not false for the best user experience... 
      data : form_data, 

      success : function(html) { 
       console.log(html) 
      } 
     }); 
    } 

    //remember to bind an event on an element to call this function to work. 
    //I hope it helps... 

</script> 
相關問題