2012-06-24 37 views
0

在我的Rails 3 ajax脚手架上,我在ajax上有一个钩子:成功,它接受调用实体(a,form等)的数据加载属性中定义的任何代码并使用jQuery执行它。 globalEval。我要访问一个局部变量挂钩,例如返回的数据,但如果我使用...局部变量和jQuery.globalEval

alert(data) 

...在加载PARAM它给了我,即使该参数是一个未引用变量错误在钩参数。

任何想法如何在不改变脚手架的情况下使用数据变量?这不会很难改变脚手架,但它不会很好!

什么我说的,在它的最简单形式的一个例子:

function testMe(data) 
{ 
    jQuery.globalEval('alert(data);'); 
} 

此代码是告诉我的数据是没有定义,我该如何将数据传递到globalEval是我的问题。

+0

'globalEval'?为什么??? – gdoron

+0

我没有创建它,它是一个在ajax完成时动态执行代码的rails脚手架! –

+0

那么,我写了什么问题,我不知道你如何修复你无法控制的代码...... :( – gdoron

回答

1

globalEval全局评估代码,因此忽略范围。由于数据是testMe内部的变量,而不是全局范围内的变量,因此实际上它是未定义的。你可以这样做:

var testMeData; 
function testMe(data) 
{ 
    testMeData = data 
    jQuery.globalEval('alert(testMeData);'); 
} 

这将输出你想要的。但我不明白你为什么想要这样做。

+0

这可能会产生问题,如果'testMeData'在某个外部范围内定义,但不是全局的,更可靠的定义全局变量的方法是使用'window'对象来引用它:'window.testMeData = data'或'window ['testMeData'] = data'。这样的赋值'testMeData'会更多可能是全球性的。 – Tadeck