2012-07-27 92 views
0

我有一種情況,我需要爲通過發送到PHP腳本,將執行插入在MySQL中的ajax請求選擇的每個複選框插入查詢。發送複選框值到PHP頁面使用JavaScript Ajax而不是jQuery

我知道如何做到這一點,沒有通過簡單的表單提交像group []作爲一個數組的變量,並在數組中的每個值運行PHP的foreach循環。

我如何通過發送ajax請求發送數組?

一個示例代碼:

<input type='checkbox' name='groups[]' value='1'>Group A 
<input type='checkbox' name='groups[]' value='2'>Group B 
<input type='checkbox' name='groups[]' value='3'>Group C 

請幫幫忙,我知道這可能是容易的,但我只是沒有得到它。和傢伙,請不要給任何jquery或喜歡的例子,因爲我想要純html,javascript和php解決方案。

感謝社區...

這裏的JavaScript函數:

<script type='text/javascript'> 
function addResp(tid){ 

a = encodeURIComponent(document.getElementById('course_add_resp').value); 
b = encodeURIComponent(document.getElementById('term_add_resp').value); 
c = encodeURIComponent(document.getElementById('paper_add_resp').value); 

var elements = document.getElementsByName('groups[]'); 
var data = []; 
for (var i = 0; i < elements.length; i++){ 
if (elements[i].checked){ 
    data.push('groups[]='+elements[i].value); 
    } 
} 
params = "tid="+tid+"&course="+a+"&sem="+b+"&paper="+c+"&grp="+data; 
if (window.XMLHttpRequest) 
{ 
xmlhttp=new XMLHttpRequest(); 
} 
else 
    { 
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
{ 
if (xmlhttp.readyState==4 && xmlhttp.status==200) 
{ 
document.body.removeChild(document.getElementById('respBackground')); 
document.body.removeChild(document.getElementById('respBox'));  
contents = xmlhttp.responseText;  
if(contents == "done"){ 
window.location = "teachers.php"; 
} else{ 
document.getElementById("studentBox").innerHTML = "There was a problem serving the  request."; 
} 

    } 
    } 
xmlhttp.open("POST","assignresp.php",true); 
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
xmlhttp.send(params); 

} 

</script> 

和PHP腳本:

<?php 

    $tid = mysql_real_escape_string($_POST['tid']); 
    $cid = mysql_real_escape_string($_POST['course']); 
    $sem = mysql_real_escape_string($_POST['sem']); 
    $paper = mysql_real_escape_string($_POST['paper']); 
    $session = 12; 
    $type = 1; 

    $groups = $_POST['grp']; 

    foreach ($groups as $value) { 
     $q1 = "insert into iars(sessionid,teacherid,courseid,semester,paperid,groupid,type) values('$session','$tid','$cid','$sem','$paper','$value','$type')"; 
     $r1 = mysql_query($q1) or die(mysql_error()); 
     if(mysql_affected_rows() > 0){ 
      echo "done"; 
     } 
     else{ 
      echo "fail"; 
     } 
    } 


?> 
+0

你將不得不寫更多的代碼,你想甩掉jquerry。 – 2012-07-27 04:52:19

+0

我不想在這裏使用jqeury ... – coder101 2012-07-27 05:00:00

+0

,我相信你有一個很好的理由... – 2012-07-27 05:03:51

回答

3
var elements = document.getElementsByName('groups[]'); 
var data = []; 
for (var i = 0; i < elements.length; i++){ 
    if (elements[i].checked){ 
     data.push('groups[]='+elements[i].value); 
    } 
} 
xmlhttp.open("POST",url,true); 
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
xmlhttp.send(data.join('&')); 
//for get 
//xmlhttp.open("GET",url+"?"+data.join('&'),true); 
//xmlhttp.send(); 

編輯

更改這兩行。

params = "tid="+tid+"&course="+a+"&sem="+b+"&paper="+c+"&"+data.join('&'); 

$groups = $_POST['groups']; 
+0

嘿非常感謝代碼..我有一個問題仍然是我檢查值提醒可變數據,根據你的代碼顯示groups [] = 1,groups [] = 2等...當我改變代碼,只是輸出變量數據,它顯示1,2,3 ...我只是想知道我將如何處理php中的變量,如你所建議的。我知道如果我發現像$ groups = $ _POST [groups]這樣的php變量中的所有值,我將運行一個foreach循環爲每個值創建一個插入,但如何使用ur js代碼執行abt,因爲它似乎我會發送多個組[]到php腳本.. – coder101 2012-07-27 06:52:32

+0

它應該以同樣的方式工作,無需更改您的PHP腳本 – Musa 2012-07-27 06:58:21

+0

然後在PHP腳本中,我應該寫$ groups = $ _POST ['groups []']我們正在通過javascript發送羣組[] = 1&groups [] = 2等等...... – coder101 2012-07-27 07:17:46

0

您可以用兩個辦法做到這一點,

  1. 你可以使用post ty PE Ajax調用

  2. 你可以用JavaScript的所有選定的複選框值使得逗號分隔字符串,然後把它傳遞一個變量

這就是你可以做.... :)

+0

逗號分隔,我認爲,但它太複雜,然後在PHP中獲取值,併爲每個值插入查詢.. – coder101 2012-07-27 05:04:19

相關問題