好奇:是否有可能拥有动态Ajax数据变量名称?

时间:2009-08-20 09:20:22

标签: javascript jquery ajax dynamic variables

某些背景:

在最近的一个项目中,我尝试编写一个简化的jQuery插件,该插件可以处理在更新各种输入时进行的一些Ajax调用。我将JavaScript函数编写为插件,以便我可以在各种输入上调用它,如:

$("#email").updateChanges();

然后,在插件中,我收集了输入的id,value等。

问题:

我真正想做的事情,但无法找到解决方案,是动态生成通过ajax传递的数据变量的名称。

更清楚一点,给定此功能:

jQuery.fn.updateChanges = function(){

   this.bind('blur',function(){

      var inputName = $(this).attr("name");
      var inputValue = $(this).val();

      $.post('/ajax/updateValue.php',
        { email: inputValue }, function(ret){
           if (ret=='success') alert("all good!");
        }

   }

}

...当inputName变量是“password”而不是“email”时,如何将Ajax调用的数据显示为{ password: inputValue }而不是{ email: inputValue }?这是一个非常具体的例子,但基本上我只是在寻找一种从单独的动态变量中读取数据变量名称的方法。

我没有运气就试过window[inputName],而且我非常相信这是不可能的。但是,如果有人有想法,我会留下深刻的印象。

顺便说一下,我们最终选择了{ type: inputName, value: inputValue },但是在PHP方面需要更多的工作(不要问我,我只是前端人员:)。

提前致谢!

2 个答案:

答案 0 :(得分:20)

如果我理解正确,那就是你所追求的:

jQuery.fn.updateChanges = function(){

   this.bind('blur',function(){    

      var data = {};
      data[$(this).attr("name")] = $(this).val();

      $.post('/ajax/updateValue.php',
        data,
        function(ret){
           if (ret=='success') alert("all good!");
        }    
   }    
}

您的主要问题是尝试使用对象文字表示法来使用动态值,如果不回复到非常糟糕的做法(例如使用eval()不属于eval(),则无法做到这一点。)。

var myObj = { 'n1': 'v1' };

相当于:

var myObj = {}; // {} = new Object();
myObj['n1'] = 'v1';

相当于:

var myObj = {},
    myKey = 'n1',
    myVal = 'v1';

myObj[myKey] = myVal;

答案 1 :(得分:-1)

试试这个:

jQuery.fn.updateChanges = function(){

   this.bind('blur',function(){

      var inputName = $(this).attr("id");
      var inputValue = $(this).val();
      var data = eval("{"+ inputName  +":"+ inputValue  +" }");

      alert("send: "+ inputName+"\n"+data[inputName]);

      $.post('/ajax/updateValue.php',
        data, function(ret){
           if (ret=='success') alert("all good!");
        }

   }

}