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

Tre*_*ter 9 javascript variables ajax jquery dynamic

一些背景:

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

$("#email").updateChanges();
Run Code Online (Sandbox Code Playgroud)

然后,从插件中,我收集了输入的id,值等.

问题:

我真正想做的事情,但无法找到解决方案,是动态生成通过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!");
        }

   }

}
Run Code Online (Sandbox Code Playgroud)

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

我试着window[inputName]没有运气,我非常相信这是不可能的.但是,如果有人有想法,我会非常感动.

顺便说一句,我们结束了去{ type: inputName, value: inputValue }代替,但(不要问我,我只是前端家伙:)它需要一点点的跑腿在PHP端.

提前致谢!

Lio*_*hen 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!");
        }    
   }    
}
Run Code Online (Sandbox Code Playgroud)

您的主要问题是尝试使用对象文字表示法来使用动态值,这是您无法恢复到非常糟糕的做法(例如使用eval()不属于eval()的情况;).

var myObj = { 'n1': 'v1' };
Run Code Online (Sandbox Code Playgroud)

相当于:

var myObj = {}; // {} = new Object();
myObj['n1'] = 'v1';
Run Code Online (Sandbox Code Playgroud)

相当于:

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

myObj[myKey] = myVal;
Run Code Online (Sandbox Code Playgroud)