2012-01-08 94 views
1

我正在做一个post调用,并想设置我通过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

{postvars}和{N:N}不equivelent,

{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" 
); 
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"); 
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!" 
}