2010-04-07 3 views
1

Préface: Je me considère comme « un peu efficace » dans le rubis sur des rails, et un novice en javascript. En outre, oui, j'ai installé jQuery et les plugins associés à la place de la bibliothèque Prototype par défaut.
Je suis dans une situation où je tire dans une table de hors site dans un iframe (qui prend soin de tous les JS internes pour moi) de sorte que lorsqu'une partie de la table est cliqué, un td gagnera la classe "actif." Ce que je voudrais faire est de prendre cette information (je suppose que je peux l'obtenir dans un format de chaîne), et le passer à une méthode (dans mon contrôleur, je suppose) qui va analyser le code HTML, retirez le informations pertinentes, puis appelez une méthode de création dans le même contrôleur avec les informations analysées, le résultat final étant un nouvel élément dans cette table.Javascript grab html à partir iframe externe + appelant une action de contrôleur avec des données

Ce que j'ai à ce jour est le javascript que je crois est correct:

<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> 

et, bien sûr, un bouton avec id = "Importer".

J'ai regardé cette question: Using jQuery To Call A Controller Action mais je ne sais pas très bien comment appeler une action du contrôleur pour passer le contenu du td sous forme de chaîne. Est-ce faisable avec la méthode post de jQuery?

INFO AJOUTÉE: mon 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> 

Répondre

1

Dommage que vous laissiez tomber Prototype - je aurait pu vous aider mieux ;-)

experts jQuery ne hésitez pas à me corriger, mais je crois que vous voulez quelque chose comme:

<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> 

Si vous voulez faire avec Prototype, vous utilisez:

<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> 

Maintenant, ater relisant votre question, je vois que le <td> vous souhaitez obtenir des données à partir est dans un iFrame d'un autre site, cela est exact? Si c'est le cas, JavaScript n'aura pas accès à cet iFrame en raison de restrictions de sécurité. Voir this MSDN article ou google pour "la sécurité cross-domaine iframe". Si c'est votre problème, veuillez fournir plus de détails sur les deux domaines en question ... vous pouvez ou ne pas être malchanceux.

+0

Heh, si vous pouvez me aider dès le début avec le prototype, je serais plus que disposé à revenir en arrière. Ceci est le premier (et probablement le seul) bit de JS dans le projet, donc ce n'est pas comme s'il y avait trop de recul. La seule raison pour laquelle j'ai changé est parce que le collègue à qui j'ai parlé a recommandé jQuery plutôt que Prototype. – Zind

+0

@Zind: Voir ma réponse éditée. Sachez que cela ressemble à ce que vous essayez de faire est impossible en raison de la sécurité inter-domaines iframe – Josh

+0

Ouais, je remarque que cela pourrait être un problème quand je couchait dans Firebug juste essayer de voir si ce que j'avais jusqu'à présent était même en train de chercher les bonnes données - je pourrais en fait ne pas avoir de chance, mais merci pour l'assistance JS de toute façon, ça viendra en pratique très utile si je devais être capable de combler le fossé. – Zind

Questions connexes