2012-06-24 2 views
0

В моем Rails 3 ajax scaffolding У меня есть крючок на ajax: успех, который принимает любой код, определенный в атрибуте загрузки объекта (a, form и т. Д.) И выполняет его с помощью jQuery. globalEval. Я хочу, чтобы получить доступ к локальному переменному в челноке, например, возвращаемые данных, но если я использую ...Локальные переменные и jQuery.globalEval

alert(data) 

... в нагруженных парах он дает мне ошибку переменную без ссылок, даже если этот параметр является в параметрах hook.

Любая идея использования переменной данных без изменения эшафота? Было бы нелегко изменить эшафот, но было бы неплохо не иметь!

Пример того, что я говорил в его простейшей форме:

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

Этот код говорит мне данные не определены, как я передать данные globalEval мой вопрос.

+0

'globalEval'? ЗАЧЕМ??? – gdoron

+0

Я не создавал его, это rails scaffold для динамического выполнения кода после завершения ajax! –

+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