2010-04-07 4 views
1

Предисловие: Я считаю себя «немного эффективным» в рубине на рельсах и совершенно новичком в javascript. Кроме того, да, я установил jQuery и связанные с ним плагины вместо библиотеки Prototype по умолчанию.
Я нахожусь в ситуации, когда я нахожусь в таблице из-за сайта в iframe (который заботится обо всех внутренних JS для меня), так что, когда щелкнула часть таблицы, td получит класс «активный». То, что я хотел бы сделать, это взять эту информацию (я предполагаю, что могу получить ее в строчном формате) и передать ее методу (в моем контроллере, я предполагаю), который будет анализировать html, вытащить а затем вызвать метод создания в том же контроллере с анализируемой информацией, конечным результатом которого является новый элемент в этой таблице.Javascript html захват внешнего iframe + вызов действия контроллера с данными

То, что я до сих пор Javascript, который я считаю, это правильно:

<script type="text/javascript"> 
    var ImportInfo = function() { 
    var info = $('td.active').html(); 
    // call controller action which parses the given string, 
    //checks for existence in database, and adds new row if needed 
} 

$("#Import").click(ImportInfo); 
</script> 

и, конечно же, кнопка с идентификатором = «Импорт».

Я рассмотрел этот вопрос: Using jQuery To Call A Controller Action, но несколько не уверен, как вызвать действие контроллера, чтобы передать содержимое td в виде строки. Является ли это выполнимым с помощью метода почты jQuery?

ADDED INFO: мой IFrame:

<iframe id='locator' src="http://hosted.where2getit.com/wafflehouse/indexnew.html" width="740" height="700" marginheight="0" marginwidth="0" scrolling="no" frameborder="0" align="bottom" name="plg_iframe">No Frames</iframe> 

ответ

1

Жаль, что ты упал прототип - я мог бы помочь вам лучше ;-)

эксперты Jquery не стесняйтесь исправлять меня, но я верю, что вы хотите что-то вроде:

<script type="text/javascript"> 
    var ImportInfo = function() { 
    var info = $('td.active').html(); 
    // call controller action which parses the given string, 
    //checks for existence in database, and adds new row if needed 
    $.ajax({ 
    url: '/controller/action', 
    data: { paramName: info } 
    }) 
} 

$("#Import").click(ImportInfo); 
</script> 

Если вы хотите сделать это с Prototype, вы должны использовать:

<script type="text/javascript"> 
    var ImportInfo = function() { 
    var info = $$('td.active')[0].innerHTML; 
    // call controller action which parses the given string: 
    new Ajax.Request('/controller/action',{ 
    method: 'post' 
    parameters: { paramName: info } 
    }) 
} 

$("#Import").click(ImportInfo); 
</script> 

Теперь Атера перечитывая свой вопрос, я вижу, что <td> вы хотите получить данные из находится в плавающем фрейме с другого сайта, это правильно? Если это так, JavaScript не будет иметь доступа к этому iFrame из-за ограничений безопасности. См. this MSDN article или google для «Безопасность междоменного iframe». Если это ваша проблема, предоставьте более подробную информацию о двух доменах, о которых идет речь ... вы можете или не можете быть не повезло.

+0

Хех, если вы можете помочь мне с самого начала с прототипом, я бы более чем хотел переключиться обратно. Это первый (и, вероятно, единственный) бит JS в проекте, так что это не так, как будто слишком много шагов назад. Единственная причина, по которой я переключился, - это то, что коллега, с которым я разговаривал, рекомендовал jQuery над Prototype. – Zind

+0

@ Zind: См. Мой отредактированный ответ. Имейте в виду, что это похоже на то, что вы пытаетесь сделать, невозможно из-за междоменной безопасности iframe. – Josh

+0

Да, я заметил, что это может быть проблемой, когда я обманывал firebug, пытаясь понять, даже получал правильные данные - я мог бы на самом деле не повезло, но спасибо за помощь JS в любом случае, это будет очень удобно, если я в конечном итоге смогу преодолеть этот пробел. – Zind

Смежные вопросы