JQuery $.post 变量的Post名称

3
我在使用jquery post()函数时遇到了问题。我有多个按钮,并使用单个post函数来处理所有按钮。但似乎无法使变量的post名称起作用。
我的代码如下:
JS
注意:editor变量是在应用程序初始化时设置的变量,已存在于此代码的范围内。
controls.find('button').live('click',function(){

     //determine what button is clicked
     var action  = this.className;

     $.post("actions.php",action: editor);
     //functions run after post
});

这个变量似乎无法传递。当我将变量更改为字符串时,它可以正常工作。我还尝试对我的操作变量运行toString()函数,但没有任何变化。

如果您有任何想法,将不胜感激。


我不明白,你想做什么,变量不能作为操作发送:编辑器。 - Senad Meškin
抱歉造成困惑。我只需要根据所点击的按钮更改“操作”一词,并生成具有正确操作的POST函数。操作变量是操作的名称,其$ _POST值等于编辑器。有意义。 - Laurence
@Laurence,你不能在对象字面量语法中使用变量来指定属性的名称。你必须使用方括号表示法。请参见下面我的答案末尾的编辑。 - gilly3
2个回答

4
数据变量必须被序列化。
$.post("actions.php",{'action':action,'editor':editor});

如果这是一个GET请求,URL将会长成这样:
actions.php?action=ACTION_VALUE&editor=EDITOR_VALUE。

动作需要是一个变量。引号会将其变成字符串,对吗? - Laurence
动作是一个变量吗?嗯,你需要为每个值都有一个键。第一个元素就是这个键,所以我才认为它不是一个变量。再看看我的评论。 - Jason Kaczmarsky
这个可行。我只是想把两个值合并到一个帖子对象中。帖子的名称为操作,值为编辑器。不过我可以这样做。谢谢。 - Laurence

1

这是无效的JavaScript代码:

action: editor

如果editor是在你的代码中其他地方定义的变量,那么可能你正在尝试发送一个对象:
{ action: editor }

当对象具有一个名为“action”的属性,其值与editor相同时。在这种情况下:

  1. 服务器会发送一个“action=[editor的值]”的post body。
  2. 您之前定义的action变量不会被使用,也不会被发送到服务器。

post body通常采用“key1=value1&key2=value2”的形式。jQuery接受一个被转换为post body的对象。这样的对象看起来像{ key1: "value1", key2: "value2" }。因此,您的调用将如下所示:

$.post("url.php", { key1: "value1", key2: "value2" });

或者,如果您已经为这些值定义了变量:

$.post("url.php", { key1: value1, key2: value2 });

猜测一下...也许您想要的是:

$.post("actions.php", { action: action, editor: editor });

编辑:根据您的评论,也许这就是您想要的:

var postData = {};
postData[action] = editor;
$.post("actions.php", postData);

没有对象字面量语法来指定变量的属性名称。你必须使用方括号表示法来实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接