2009-07-16 9 views
0

J'ai besoin d'obtenir du contenu d'une page externe et de le passer en argument à une fonction. J'ai regardé dans la méthode url() dans la documentation de JQuery mais il semble que c'est seulement possible de l'utiliser pour insérer du contenu externe dans div ou un autre élément HTML.JQuery - Aide de la méthode load() AJAX

En fait ce que je dois faire est:

// I need to insert external page's content into the cont variable, how to do that? 
var cont; 
// so I can pass it to the bt() function (it's a tooltip plugin) 
$('.class').bt(cont, { 
    fill: '#2a4d6b', 
    cssStyles: {color: 'orange', fontWeight: 'bold', width: 'auto'} 
}); 

Quelqu'un peut-il me dire si quelque chose comme ça est possible?

Répondre

1

Vous voulez utiliser .get (http://docs.jquery.com/Ajax/jQuery.get#urldatacallbacktype) insetad de charge. Il prend une fonction de rappel en argument. Le ci-dessous va charger un lien et l'afficher dans une alerte.

$.get('http://your.website.com/page.html', 
    function (data) { alert(data) }); 

votre exemple réécrite:

$.get('http://your.website.com/page.html', 
     function (data) { setClass(data); }); 

function setClass(cont) { 
    $('.class').bt(cont, { 
     fill: '#2a4d6b', 
     cssStyles: {color: 'orange', fontWeight: 'bold', width: 'auto'} 
    }); 
} 
+0

Vous pouvez certainement obtenir un contenu différent pour chaque classe .class, mais cela sera le moyen le moins efficace pour le faire. Vous ne voulez pas tous les faire en boucle car il serait plus sage de simplement définir le contenu lors du chargement initial de la page (pas d'ajax), et si vous voulez charger le contenu lorsque l'info-bulle est en cours de chargement, probablement être une mauvaise expérience utilisateur (en attendant le tooptip pendant le chargement du contenu). – Prestaul

+0

Merci, le problème est qu'il y a beaucoup d'infobulles et la plupart d'entre elles sont générées dynamiquement à partir d'autres pages, donc l'AJAX est le seul moyen. Les charger tous avec PHP rendrait le chargement de la page beaucoup plus lent. Ce que j'ai fait est inclus un texte "Chargement ..." dans l'info-bulle pendant le chargement du texte externe. Et cela ne prend pas trop de temps, 1-2 secondes et l'info-bulle est chargée. –

2
$.load("http://someplace", function(data){ 
    $('.class').bt(data, { 
     fill: '#2a4d6b', 
     cssStyles: {color: 'orange', fontWeight: 'bold', width: 'auto'} 
    }); 
}); 

non?

Également par external, comment externe? vous ne pouvez pas obtenir quelque chose d'un autre domaine, sinon cela fonctionnera

+0

D'accord, élément n'a pas à faire partie de dom –

+1

Cela fonctionne, mais est sans doute moins efficace que .get qui est conçu pour être utilisé de cette façon. Load doit être utilisé pour charger le contenu d'un élément, le callback est là afin que vous puissiez exécuter javascript sur les données chargées. –

+0

C'est sur le même domaine. Puis-je utiliser une adresse URI relative? Comme contrôleur/action/id/53423? –

-1

Cela devrait être possible. Ce devrait travail (je n'ai pas essayé moi-même) est de faire un IFRAME caché sur la page. Ensuite, réglez src sur l'URL que vous souhaitez obtenir, puis utilisez le DOM pour accéder au contenu de l'IFRAME. Donnez votre avis sur ceci si cela ne vous semble pas clair.

+0

vous n'avez pas utilisé jQuery avez-vous –

+0

C'est ce que AJAX est pour; un iframe n'est pas nécessaire. En outre, si quelqu'un pense que cela fonctionnera pour le contenu inter-domaine, c'est faux aussi. –

+0

J'ai beaucoup utilisé jQuery, mais pas la bibliothèque AJAX. Et si vous lisez le message original, il ne dit pas "Quelqu'un peut-il me dire si quelque chose comme ça est possible * DANS JQUERY *?"; il voulait juste savoir si c'était possible (et c'était la partie à laquelle je répondais). – machineghost

Questions connexes