我正在进行一次调用,并希望设置我通过一些if / else语句动态发送的参数。以下简化版本不起作用,但如果我将'{postvars}'更改为'{n:n}'那么它确实如此,即使它们是等效的,对吧?
<html>
<head>
<title></title>
<script type="text/javascript" src="jquery-1.7.1.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$("#clicky").click(function () {
var postvars; var mydata;
var n = 'dave';
postvars = 'n: ' + n;
$.post("test.php",
{postvars},
function(data){
},
"text"
);
$("#test").text(postvars);
});
});
</script>
</head>
<body>
<div id='clicky'>click here</div>
<div id='test'></div>
</body>
</html>
答案 0 :(得分:1)
试试这样:
// define an empty object
var data = { };
var variableName = 'n';
var variableValue = 'dave';
// assign properties of the data object dynamically
data[variableName] = variableValue;
...
然后发布您动态构建的data
变量:
$.post("test.php", data, function(result) {
alert(result);
}, "text");
答案 1 :(得分:0)
{postvars}和{n:n}不等同,
{postvars}将被视为javascript作为对象initalizer,并将作为postvars错误输出只是一个字符串,它不能自己设置对象的属性/值。
{n:n},但是它是一个适当的对象initalizer,因为它给出了名称和值
jquery ajax函数采用名称值对字符串
$.post("test.php",
"data=somedata&moredata=thisdata",
function(data){
},
"text"
);
或json对象,
var newData = "Some new data";
var data = {
"dataname":"datavalue";
};
//add dynamic variables to object
data["newData"] = newData;
$.post("test.php",
data,
function(data){
},
"text"
);
答案 2 :(得分:0)
如果要获取表单的变量,可以使用serialize()
函数来获取参数字符串。
http://api.jquery.com/serialize/
如果要从对象获取参数字符串,则必须使用$.param()
函数:
http://api.jquery.com/jQuery.param/
像这样:
function someFunc() {
var obj=new Object();
obj.n=1;
obj.str="Hello!";
var dataStr=$.param(obj);
//dataStr is now "n=1&str=Hello!"
}