AJAX PHP函数onchange选择框

时间:2014-03-13 16:17:41

标签: javascript php jquery ajax

我有一个问题,我很困惑。我有一个使用mysqli查询动态生成的选择框:

$result = mysqli_query($db, "SELECT * FROM `users` WHERE `user_id` > 0");
echo '<html><form name="contacts" method="post"><select name="contacts"><option value="Contact list" onchange="func()">Contact List</option>';
while($row = $result->fetch_assoc()){
    echo '<option value = '.$row['user_name'].'>'.$row['user_name'] . '</option>';
}
echo '</select></form>';

我是AJAX的新手,但我需要使用jquery和ajax将this.value变量传递给php变量,以便在以后的查询中使用。

这是我的剧本(大多数是在网上找到的):

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
$("#contacts").change(function() {
    //get the selected value
    var selectedValue = this.value;

    //make the ajax call
    $.ajax({
        url: 'function.php',
        type: 'POST',
        data: {option : selectedValue},
        success: function() {
            console.log("Data sent!");
        }
    });
});
</script>

现在,当我单击选择框中的值时,没有任何反应。没有警告或错误等。

请帮帮我。

P.S。 function.php确实存在。它现在只是一个简单的回声(用于测试目的)

更新:这里是FUNCION.PHP:

<?php
/*$val = $_REQUEST['selectedValue'];
echo $val;*/

function function(){
$val = $_REQUEST['selectedValue'];
echo $val;
}
?>

更新:谢谢大家的帮助。我现在已经开始工作,因为chrome inspect的网络部分显示了被请求的function.php但是我仍然没有得到回声(我使用外部.js文件来使其工作)。我的J查询功能也很成功(成功功能回到控制台)

5 个答案:

答案 0 :(得分:6)

您的选择框没有ID,而您正在观看change $("#contacts")事件。

变化:

echo '<html><form name="contacts" method="post"><select name="contacts"><option value="Contact list" onchange="func()">Contact List</option>';

为:

echo '<html><form name="contacts" method="post"><select name="contacts" id="contacts"><option value="Contact list">Contact List</option>';
                                                                        ^^^^^^^^^^^^^ here

你也只需要一个事件处理程序,所以我删除了一个似乎什么都不做的内联函数。

编辑:如果使用ajax创建了select,则需要事件委派:

$("body").on('change', '#contacts', function() {
   ^^^^ for example

编辑2 :您的变量名为$_REQUEST['option'],而不是$_REQUEST['selectedValue']。你也没有调用你的-badly named - 函数,因此你不会从php获得任何输出,除了像Parse error: syntax error, unexpected 'function' ...这样的错误。

答案 1 :(得分:3)

在select标签中调用onchange功能,如下所示

echo '<form name="contacts" method="post"><select name="contacts" onchange="func(this.value)"><option value="Contact list">Contact List</option></form>';

Javascript src应该在html页面的头部。

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">

在html的头部添加上面的一个。更新javacript如下

由于onchange函数在select标签本身中被调用,因此下面就足够了

<script>

function func(selectedValue)
 {
    //make the ajax call
    $.ajax({
        url: 'function.php',
        type: 'POST',
        data: {option : selectedValue},
        success: function() {
            console.log("Data sent!");
        }
    });
}
</script>

更新了php:如果你想从函数中获取值,你必须调用它。否则,简单地说,您可以按以下方式进行

    <?php
    if($_REQUEST['option'])
    {
    $val=$_REQUEST['option'];
echo $val;
     }
    ?>

答案 2 :(得分:0)

在.php文件中,首先接收它 -

$val = $_REQUEST['selectedValue'];
echo $val;

答案 3 :(得分:0)

在php代码中为select标记和

设置一个id属性

请不要在表单中使用相同的name属性值并选择标签!!

答案 4 :(得分:0)

只需将您的功能更改为'body'.on,并为您的元素添加“联系人”ID

$("body").on('change', '#contacts', function() {
    //get the selected value
    var selectedValue = $(this).val();

    //make the ajax call
    $.ajax({
        url: 'function.php',
        type: 'POST',
        data: {option : selectedValue},
        success: function() {
            console.log("Data sent!");
        }
    });
});