jquery函数中的变量为null

时间:2012-10-23 08:15:39

标签: php javascript jquery html

我在网页上看到我的一个变量时遇到问题。这是我到目前为止所拥有的。

 $(document).ready(function() {
    $(function() {
        $("#CheckID").click(function() {
         // submit ajax job and display the result
         var id = '$("#ID").val()'      
            $.ajax({
                type: "POST",
                url: "test_wID.php",
                data: "id",
                success: function(data) {
                $('#rightselection').html(data)
                }
            });
        });
    });
});

这是我用来将ID输入到表单中的jquery函数,并将该ID与bash脚本一起使用。

这是php。

<?php

//Get the ID from the HTML form and use it with the check chunk script.

$id = $_POST['ID'];
if (is_null($id)){
        echo "$id is null";
}
echo "Selected test Game ID: ".$id;
//print shell_exec('/opt/bin/tester $id');

?>

我注释掉了脚本,因为变量返回null,此时我只是想确保获取ID。

为了完整性,这里是我正在使用的表格。

print "<p><h3>ID: <input type=\"text\" id=\"ID\" /></h3></p>";

#print "<br>";

print "<p><button id=\"CheckID\">Check ID</button></p>";

当我点击按钮时,我在div中得到消息,该变量为null。所以我的问题是我在宣言中遗漏了什么? var id如何为空?

感谢您提供的任何帮助。

5 个答案:

答案 0 :(得分:2)

你在两点混合了字符串和变量引用。

首先,语句var id = '$("#ID").val()'只为您的if变量分配一个字符串,而不是jQuery调用的返回值。所以只需删除此处的'

其次,您再次为data调用提供的ajax()参数只包含字符串"id",而不是相应的值。在这里,您需要更改为{'id': id}

因此,在纠正所有内容后,您的代码应如下所示:

 $(document).ready(function() {
        $("#CheckID").click(function() {
         // submit ajax job and display the result
         var id = $("#ID").val();     
            $.ajax({
                type: "POST",
                url: "test_wID.php",
                data: {'id': id},
                success: function(data) {
                  $('#rightselection').html(data);
                }
            });
        });
});

旁注:尝试将所有;放在他们所属的位置。这可以防止一些很难跟踪的错误!

修改

正如@FlorianMargaine在评论中指出的那样,你的代码周围只需要一个包装器而不是两个。

答案 1 :(得分:2)

您应该考虑将jQuery代码更改为:

$.ajax({
    type: "POST",
    url: "test_wID.php",
    data: {id: $("#ID").val()},
    success: function(data) {
        $('#rightselection').html(data)
    }
});

答案 2 :(得分:1)

首先,以下两个片段等效

$(document).ready(function() {
});

// Is equivalent to:

$(function() {
});

所以你的代码与:

相同
$(document).ready(function() {
    $(document).ready(function() {
    });
});

平原无用,对吧?

其次,这一行是完全错误的:

var id = '$("#ID").val()';

您将字符串传递给id变量。 $('#ID').val() 未评估。这相当于在PHP中执行此操作:

$id = '$_POST["id"]';

哪个是错的,对吧?

你想要这个:

var id = $('#ID').val();

顺便说一句,这个变量命名可以改进,HTML ID也是如此。

第三,你在data的{​​{1}}选项中犯了同样的错误:

$.ajax

您只是将字符串传递给data: 'id' 选项。 您需要data变量的值。

然后,如果你绝对想要一个字符串,我不推荐它。 jQuery需要一种特殊的字符串。你最好传递一个对象。像这样:

id

你知道为什么变量命名错了吗?您无法区分属性和值。如果您已完成以下操作:

data: {
    id: id
}

你可以用这个:

var idValue = $('#ID').val();

哪种方式更具可读性。

答案 3 :(得分:0)

在您的$ .ajax电话中,您需要执行以下操作:

data : { id: id }

答案 4 :(得分:-1)

如果要在AJAX调用中传递参数,则需要传递一个类似于在URL中看到的GET字符串的字符串。类似于:d=123&name=test

更改行

var id = '$("#ID").val()'

var id = 'id=' + $("#ID").val();