2012-10-23 38 views
0

我遇到了在网页上看到我的一个变量的问题。这是我到目前为止。jquery函数中的变量为空

$(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为空是怎么回事?

感谢您提供任何帮助。

+1

了解javascript的。请。 –

+1

并学会清理你传递给shell命令的输入(['escapeshellarg()'](http://php.net/escapeshellarg)) - 即使它现在已被注释掉。 – ThiefMaster

回答

-1

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

更改线路

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

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

不! var data = {id:$('#ID')。val()}'''id'是负载的错误变量名。 – ThiefMaster

+0

谢谢,不知道! –

0

在你的$就打电话给你需要做的:

data : { id: id } 
+1

所以你只是传递一个JavaScript语句的字符串? –

+0

否... id将是名称,然后传递值 - 您不需要引号 - 它只是您在此处定义的JSON字符串。 – Brian

2

你混了串并两点的变量引用。

首先,语句var id = '$("#ID").val()'只给你的if变量赋值一个字符串,而不是jQuery调用的返回值。所以请在这里删除'

其次,您给ajax()再次调用的参数data仅包含字符串"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评论指出,你只需要一个包装不是两个在你的代码。

+0

纠正所有的代码,还有两个'$(document).ready'? –

+0

@FlorianMargaine忽略了那一个。纠正。谢谢。 – Sirko

2

你应该考虑改变你的jQuery代码:

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

这可能是此主题的最佳答案。谢谢! –

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。

第三,你正在做在$.ajaxdata选择了同样的错误:

data: 'id' 

你只是传递一个字符串data选项。 您需要id变量的值。

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

data: { 
    id: id 
} 

你明白为什么变量命名是错误的吗?你无法区分财产和价值。如果你做了以下情况:

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

您可以使用此:

data: { 
    id: idValue 
} 

哪个方式更具有可读性。