0

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

 $(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 并将该 ID 用于 bash 脚本的 jquery 函数。

这里是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 中收到变量为空的消息。所以我的问题是我在声明中遗漏了什么吗?怎么是var id空的?

感谢您提供的任何帮助。

4

5 回答 5

2

您在两点混淆了字符串和变量引用。

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

其次,dataajax()再次提供给调用的参数仅包含一个字符串"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);
                }
            });
        });
});

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

编辑

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

于 2012-10-23T08:17:52.203 回答
2

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

$.ajax({
    type: "POST",
    url: "test_wID.php",
    data: {id: $("#ID").val()},
    success: function(data) {
        $('#rightselection').html(data)
    }
});
于 2012-10-23T08:18:31.337 回答
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选项中犯了同样的错误$.ajax

data: 'id'

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

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

data: {
    id: id
}

你明白为什么变量命名是错误的吗?您无法将属性与值区分开来。如果您执行了以下操作:

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

你可以使用这个:

data: {
    id: idValue
}

哪种方式更具可读性。

于 2012-10-23T08:35:59.560 回答
0

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

data : { id: id }
于 2012-10-23T08:17:47.987 回答
-1

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

换行

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

var id = 'id=' + $("#ID").val();
于 2012-10-23T08:17:39.863 回答