2016-04-30 381 views
4

在我的註冊頁面上,人們可以通過填寫一些輸入廣告複選框來註冊我的網站。它基本上是一種將數據發送到帶有ajax的PHP頁面然後將其放入數據庫的表單。如何通過AJAX發送PHP數組?

的javascript中的形式獲取值這樣例如

var w = _("website").value; 
var bio = _("bio").value; 

,然後把它像這樣ajax.send("w="+w+"&bio="+bio);這是工作,因爲它應該,但我想補充一下。

現在我有一些複選框,我想要在一個數組中獲取通過ajax發佈在一個變量中。所以在我的形式,我有這一塊的PHP:

$licensessql = mysqli_query($db_conx, "SELECT * FROM licenses"); 
while($licenserecord = mysqli_fetch_assoc($licensessql)) { 
echo '<input type="checkbox" value="'.$licenserecord["license"].'" name="licenses[]" id="'.$licenserecord["license"].'"><label for="'.$licenserecord["license"].'">'.$licenserecord["license"].'</label><br>'; 
} 

使用純PHP這樣的工作,並把從複選框中的所有值的數組許可[],但我不知道如何實現這一目標用ajax 。如果我有5個複選框,我希望javascript var具有值'value1,value2,value3'並將其發佈到PHP。

謝謝!

回答

1

首先我建議使用形式系列化,張貼在其他的答案。

爲了回答您的實際問題:"If I have 5 checkboxes, I want the javascript var to have for example the value 'value1,value2,value3' and have that posted to PHP."

這裏是一個完全工作示例(使用3個複選框),這將產生一個JavaScript變量,你可以用它來傳遞給你的AJAX POST方法用於PHP處理。

的jsfiddle:https://jsfiddle.net/o5q04vf0/

代碼段:

$(document).ready(function() { 
 
    $('#btnTest').click(function() { 
 
    var checkBoxValues = $("[name=licenses\\[\\]]").map(function() { 
 
     if ($(this).is(':checked')) { 
 
     return this.value; 
 
     } 
 
    }).get().join(); 
 

 
    alert(checkBoxValues); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="checkbox" value="0" name="licenses[]" /> 
 
<input type="checkbox" value="1" name="licenses[]" /> 
 
<input type="checkbox" value="2" name="licenses[]" /> 
 
<button id="btnTest">Submit</button>

這將幫助您在正確的方向引導,但不考慮通過AJAX傳遞數據,如其他成員交換你的方法在這裏建議。

+0

這個解決方案爲我工作!非常感謝! –

0

使用POST和序列化器陣列作爲數據

$data = $('form').serialize(); 
 
    $.post("ajax/test.html", function($data) { 
 
     $(".result").html(data); 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form action="demo_form.asp"> 
 
    <input type="checkbox" name="vehicle" value="Bike"> I have a bike<br> 
 
    <input type="checkbox" name="vehicle" value="Car" checked> I have a car<br> 
 
    <input type="submit" value="Submit"> 
 
</form>

在PHP

您使用$_POST['attributeName']讀取值

+0

感謝您的回答!我只希望這個值被序列化,所以這是我現在的數組值:'var licenses = $('input [name =「licenses」]')。serializeArray();'這就是發佈的內容到數據庫。因爲我在數組外還有其他複選框,所以我需要指定名稱。但這是現在發佈到數據庫的內容,而不是實際值:[object Object],[object Object],[object Object] .. 。 –

+0

http://stackoverflow.com/questions/5389050/serializing-checkboxes-in-jquery我認爲這有助於 –

0

您可以serializeArray功能發送的所有形式的數據。
Serialize用於GET,而serializeArray對POST很有用。

$('#btn-send').click(function(e) { 
    $.ajax({ 
     url: 'url-to-data-send', 
     method: 'post', 
     data: $(this).closest('form').serializeArray(); <--- send form data 
    }).done(function(response) { 
     alert('form sent'); 
    }) 
}); 

,或者你可以指定你想送什麼definetely

var data = $(this).closest('form').serializeArray(); 
    console.log(data); 

FIDDLE

**編輯**

這是你想要我猜

什麼
var arr = []; 
$.map($(this).closest('form').find('input[name="chck[]"]:checked'), function(n, i) { 
    arr.push({ name: $(n).attr('name'), value: $(n).val()}); 
}); 
console.log(arr); 

FIDDLE 2

+0

感謝您的回答!我只希望這個值被序列化,所以這是我現在的數組值:'var licenses = $('input [name =「licenses」]')。serializeArray();'這就是發佈的內容到數據庫。因爲我在數組外還有其他複選框,所以我需要指定名稱。但這是現在發佈到數據庫的內容,而不是實際值:[object Object],[object Object],[object Object] .. –

+0

@SenneVandenputte我更新了我的答案,檢查是否對你有幫助。 – daremachine

0

這裏,我們去:

你需要序列化功能!下面是一個怎樣的exaple你可以使用它:

HTML:

<form id="yourOrderFormId" method="post"> 
<input type="checkbox"/><input type="text"/> 
<input type="checkbox"/><input type="text"/> 
<button id="yourButtonId">Send</button> 
</form> 

的jQuery的Ajax:

<script> 
    $('#yourButtonId').click(function(e) { 

     var yourData = $("#yourOrderFormId").serialize(); 

     $.ajax({ 
      method: 'POST', 
      url: '/yourUrl', 
      data: yourData, 
      dataType: 'html', 
      success:success: function (result) { 
      alert("Your message sent!"); 
      } 
    }); 

或用serializeArray使用();

console.log($('form').serializeArray()); 

這裏:enter link description here

希望它幫助;)

+0

我只想將我的數組的值序列化,其餘部分必須通過javascript變量發送,因爲它們檢查錯誤。我怎樣才能使用名稱爲「許可證」的複選框來序列化數組? –

+0

@SenneVandenputte試試這個方法:如果你只想序列化複選框,使用:var yourData = $(「yourCheckboxId」)。val(); insted of var yourData = $(「#yourOrderFormId」)。serialize(); – praguan

+0

我認爲它現在正在工作,但在我的數據庫中,我現在看到[對象對象],[對象對象],而不是複選框的值。 –