2009-09-30 4 views
1

Cela peut être une question philosophique.Comment JavaScript est-il évalué sur la page cible dans une situation AJAX?

Supposons que vous faites une requête AJAX à une page (ce qui est à l'aide d'un prototype):

new Ajax.Request('target.asp', 
{ 
method:"post", 
parameters:{alldata:Object.toJSON(myinfo)}, 
onSuccess: function(transport){ 
    var response = transport.responseText || "no response text"; 
    alert("Success! \n\n" + response); 
}, 
onFailure: function(){ alert('Something went wrong...') } 
}); 

Supposons maintenant sur la page cible, le serveur - en utilisant ASP - génère un peu de JavaScript basé sur la objet myinfo vous l'avez envoyé, et vous êtes intéressé par le JavaScript résultant. Ma conjecture est que, puisque cette page cible n'est jamais vue par un navigateur (où l'interpréteur JS vit), le JS n'est pas évalué. Et il sera seulement évalué si elle est retournée à la page d'appel et évalué . Est-ce le point?

Merci d'avoir vissé ma tête directement sur moi.

+1

Oui, votre hypothèse est bonne. – Gumbo

+1

La variable de transport contiendra la réponse du serveur, normalement ce ne devrait pas être une page HTML complète mais plutôt un fragment ou des données (JSON, XML, etc.). Qu'essayez-vous d'accomplir? C'est probablement une meilleure question que cette approche ésotérique. – Lazarus

+0

C'est une application interne à ma petite équipe de développeurs qui aide à gérer les builds pour les outils sous contrôle de source CVS. Le jist est que nous sommes à un point où nous voulons faire un peu de travail sur le serveur (cvs commits, des trucs comme ça) et renvoyer à la page d'appel les résultats de ce travail. Ainsi, la page Requesting demande au serveur de faire certaines choses, et la page Worker fait les choses et renvoie les informations à la page Requesting. Le serveur doit donc accepter la demande, la traiter et formater les résultats pour les renvoyer à la page de demande. Je profite de cette opportunité pour apprendre de nouvelles technologies web. – Chris

Répondre

1

Oui, l'hypothèse est juste. La réponse de cette requête Ajax est juste une chaîne. Et cela doit être interprété d'une manière ou d'une autre que le JavaScript incorporé dans cette réponse est également interprété.

1

La page JS sur la page target.asp n'est pas évaluée dans le client sauf si vous l'évaluez() ou si vous l'insérez dans le DOM ou quelque chose.

1

Je ne suis pas du tout à l'aise avec ASP, je vais dire que l'avant ...

Si le serveur génère javascript, ce serait comme une chaîne. En tant que tel, il devrait être écrit dans le DOM d'une certaine manière afin d'être significatif (j'inclue le script ajax quand je dis DOM).

MAIS !!!

Je sais que ASP et .NET sont vraiment bizarres et aiment mettre des crochets et des rappels partout. En théorie, ASP fait parle javascript et peut donc avoir un interprète de son propre. Mais j'essaie de dormir la nuit en pensant que les gens de MS n'autoriseraient pas leurs scripts côté serveur à exécuter tout ce qui est destiné au client.

Réponse courte: oui, si le code n'est pas écrit sur la page, le code ne doit pas être exécuté. Vous devriez encoder la sortie de votre serveur pour être du bon côté, simplement parce que c'est une bonne pratique (changer < à &lt;, etc.).

Questions connexes