2013-07-02 92 views
0

我試圖將更改下拉列表的值發送到PHP腳本。但以我解決問題的方式,表單和狀態字符串都會發布兩次。一旦設置了GET參數,另一個沒有。我不知道如何解決,但也許你比我聰明。Dropdown value onchange to PHP

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
<script type="text/javascript" src="js/jquery.easing.1.3.js"></script> 
<script type="text/javascript" src="js/jquery.ennui.contentslider.js"></script> 
<script type="text/javascript"> 
function showUser() 
{ 
var users = document.getElementById('users').value; 

if (users=="") 
{ 
document.getElementById("pictab").innerHTML=""; 
return; 
} 
if (window.XMLHttpRequest) 
{// code for IE7+, Firefox, Chrome, Opera, Safari 
xmlhttp=new XMLHttpRequest(); 
} 
else 
{// code for IE6, IE5 
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.onreadystatechange=function() 
{ 
if (xmlhttp.readyState==4 && xmlhttp.status==200) 
{ 
document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 
} 
} 
xmlhttp.open("GET","slider.php?users="+users,true); 
xmlhttp.send(); 
xmlhttp.reload(); 
} 

<?php 
//............. 
//.............. 
//............. 
//.............. 
$soso = mysql_num_rows($connn3); 
for($i=0;$i<$soso;$i++) 
{ 
echo " 
$(function() { 
$('#one$i').ContentSlider({ 
width : '280px', 
height : '180px', 
speed : 400, 
easing : 'easeOutQuad' 
}); 
});"; 
} 
?> 

</script> 
<!-- Site JavaScript --> 
<form> 
<select id="users" name="users" onChange="showUser()" > 
<option value="bikes">Bikes</option> 
<option value="zub">Stuff/option> 
<option value="sonst">Other</option> 

</select> 
</form> 
<br> 
<div id="txtHint"></div> 
<?php 


if(isset($_GET['users'])){ 
echo "<h2>Q posted</h2>"; 
$q = $_GET['users']; 
echo $q; 
//DB QUERY WITH Q 

}elseif(!isset($q)){ 
echo "KEIN Q GEPOSTET"; 
// DB QUERY WITHOUT Q 
} 
?> 
+2

什麼是'xmlhttp.reload()'應該做?我無法找到該方法的文檔。 – Barmar

+0

爲什麼你不想使用jQuery? – Robert

+2

如果你使用jQuery,你爲什麼不使用它的AJAX方法而不是編寫所有的XMLHTTP的東西? – Barmar

回答

0

我認爲這是因爲你實際上正在打2個電話。一個用Javascript寫到PHP文件中,另一個用回顯,不管設置什麼。我會評論,但尚未得到足夠的果汁。

嘗試並回顯出$ _GET並查看您在通話之前和通話之後實際設置的內容。從那裏你可能會看到實際發生的事情。我希望這可以幫助你指引正確的方向。

4

您已經將Jquery包含到您的項目中,以便使用它的功能。主要是Jquery Ajax來處理Ajax請求。的代碼

$(function(){ //document is loaded so we can bind events 

    $("#users").change(function(){ //change event for select 
    $.ajax({ //ajax call 
     type: "POST",  //method == POST 
     url: "slider.php", //url to be called 
     data: { users: $("#users option:selected").val()} //data to be send 
    }).done(function(msg) { //called when request is successful msg 
     //do something with msg which is response 
      $("#txtHint").html(msg); //this line will put the response to item with id `#txtHint`. 
    }); 
    }); 
}); 

PHP的部分應該是在slider.php。此外,在示例中我使用POST但是如果你想GET只需更改type: "GET"。在script.php中獲取它的值使用:

$_POST['users'];或者如果您更改類型爲GET然後$_GET['users']您還可以使用處理POST,GET,COOKIE的$_REQUEST['users']

+0

我不會推薦使用'$ _REQUEST' - 使用起來不是很安全。使用每個單獨的超全球變量 – Bojangles

+0

@Bojangles它是可能性之一不推薦:)但我同意你 – Robert

0
var name=document.forms["myform"]["user"].value; 
$.ajax({ 
type: "POST", 
url: "yourpagenmae.php", 
data: { name: user } 
    , 
    success: function(msg) { 
     // alert(msg); 

    } 
}); 

希望它會幫助你

-1

//查看文件

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
<script type="text/javascript"> 
$(document).ready(function() { 
    //use jquery get method 
    $('#users').change(function() { 
     //get the user value 
     var user = $('#users').val(); 

     $.getJSON("http://localhost/test.php?users="+user, function(data1) { 

      console.log(data1); 

      //status 
      if (data1.status) { 
       alert(data1.q); 

       //whatever response variable key 
       $('#txtHint').html(data1.q) 
      } else { 
       alert('error'+data1.q); 
      } 
     }); 
    }); 
}); 
</script> 
<!-- Site JavaScript --> 
<form> 
    <select id="users" name="users" > 
    <option value="bikes">Bikes</option> 
    <option value="zub">Stuff</option> 
    <option value="sonst">Other</option> 
</select> 
</form> 
<br> 

<div id="txtHint"></div> 

//test.php文件

<?php 

$data = array(); 

if(isset($_GET['users'])){ 
//echo "<h2>Q posted</h2>"; 
$q = $_GET['users']; 

$data['status'] = true; 
$data['q'] = $q; 


}elseif(!isset($q)){ 

$data['status'] = false; 
$data['q'] = 'KEIN Q GEPOSTET'; 

} 

header('Content-type:application/json'); 
//json response 
echo json_encode($data); 

?> 
+0

在哪裏解釋?文檔未準備好時綁定事件可能會導致問題,並且不會始終有效。 Onchange select是binde到不存在的函數。你的回答非常無效。 – Robert

+0

檢查行前的註釋。我希望你在按下投票 – Sundar

+0

之前仔細閱讀整個代碼,有什麼意見?沒有準備好的事件,你的代碼甚至不會執行,因爲它有我上面寫的錯誤。例如,這個函數'onChange =「showUser()」'是否被聲明?用ajax引用同一個文件也不明智。 – Robert