2013-08-30 10 views
5

Also im Grunde benutze ich jQuery Post, um einen AJAX-Aufruf an eine externe PHP-Seite und dann Echo ich das Ergebnis, und dann auf der tatsächlichen Seite anzuzeigen.Javascript-Code wird durch Ajax zurückgegeben, aber nicht angezeigt

Das Problem ist, wenn die externe PHP-Seite einige Javascript zurückgibt, wird es nicht auf der eigentlichen Seite angezeigt.

Javascript

<script type="text/javascript">z_media = "SQgeKL07Nr"; z_autoplay=false; z_width=899; z_height=506;</script><script type="text/javascript" src="http://www.zunux.com/static/js/embed.js"></script> 

Meine jQuery

function videoGrabber(mirror_id, video_version, firstVideo_version, videoNumber) { 


     jQuery.post("/path/to/my/external/php/file.php", {firstParam : mirror_id, secondParam : video_version, thirdParam : firstVideo_version}, function(data) { 
      //this is your response data from serv 
     console.log(data); 
     jQuery('#videoContainer').html(data); 

    }); 
     return false; 
} 

Nun, in der Regel zurückgegeben werden, wenn Iframes zurückgegeben werden, sind sie völlig in Ordnung in der #videoContainer id zeigt jedoch, wann immer das Javascript-Code einbetten ist zurückgegeben wird, zeigt es nichts in der #videoContainer ID an. Aber ich kann definitiv bestätigen, dass die externe php-Seite die Daten zurückgibt, da ich es in der Konsole sehen kann. Also, wie kann ich das beheben?

+0

Können Sie versuchen, 'console.log (Daten)' ..? – ErickBest

+0

Was erwarten Sie von '# videoContainer'? Ihr JS-Skript hat nur ein paar Variablen ... es gibt keinen sichtbaren Inhalt und nichts, das eine JS-Funktion aufruft. – Steve

Antwort

2

Versuchen Hinzufügen eines eval(), um tatsächlich den Javascript-Code ausgeführt werden Sie abrufen:

function videoGrabber(mirror_id, video_version, firstVideo_version, videoNumber) { 
    jQuery.post("/path/to/my/external/php/file.php", {firstParam : mirror_id, secondParam : video_version, thirdParam : firstVideo_version}, function(data) { 
     //this is your response data from serv 
     console.log(data); 
     jQuery('#videoContainer').html(data); 
     eval(data); 
    }); 
    return false; 
} 

BTW sicher, dass Sie eine gute security-- eval() viel Potenzial für Chaos hat, wenn jemand die Ajax-Aufruf abfangen und injiziere ihren eigenen Code.

Oh, und da eval() wird versuchen, nur Javascript-Code zu bewerten, müssen Sie Ihren Return-Code ändern, um nur roher JS-Code (keine <script> Tags):

z_media = "SQgeKL07Nr"; z_autoplay=false; z_width=899; z_height=506; 

Die einzige andere Sache zu tun mit, ist dies:

<script type="text/javascript" src="http://www.zunux.com/static/js/embed.js"></script> 

können Sie das Skript in der anrufenden Seite (die mit dem ajax-Code) enthalten, dann auslösen es aus dem Code, den Sie über ajax bekommen? So würde Ihr Ajax-Code letztlich so etwas wie zurückgeben:

z_media = "SQgeKL07Nr"; z_autoplay=false; z_width=899; z_height=506; triggerEmbedScript(); 
+0

Aus irgendeinem seltsamen Grund bekomme ich diesen Fehler 'Uncaught SyntaxError: Unexpected token <'. Nicht genau, warum, ich fügte nur 'eval (Daten);' – Maaz

+0

sollte eval (Daten) vor dem (# videoContainer) .html (Daten) gesetzt werden? – Maaz

+0

Es wird versucht, den JS-Code zu interpretieren, beginnend mit "

0

Zur Sicherheit willen, würde ich vermeiden außerhalb Javascript anfordert und dann blind laufen, eval oder auf andere Weise. Wenn ich Sie wäre, würde ich diese Variablen in einem JSON-Objekt zurückgeben. Was das zusätzliche Skript betrifft, hätte ich das schon geladen und rufe es einfach an, wenn ich es brauche.

Sie erwähnen wiederkehrende iframes und wie sie richtig funktionieren. Meinst du damit, dass deine PHP-Datei HTML zurückgeben könnte, um sie direkt in deine #videoContainer einzufügen? Ich würde das auch vermeiden. Die von der AJAX-Anfrage zurückgegebenen Daten sind gerade erst durch unbekanntes Gebiet gelangt: das Internet. Eine bessere Struktur kann helfen, MITM-Angriffe oder XSS zu verhindern.

+0

Ich benutze Wordpress. Ich habe eine Funktion in der Datei functions.php erstellt, die externe PHP-Datei führt nur diese Funktion aus. – Maaz

0

Wie ich in meinem Kommentar oben erwähnt habe, tut der zurückgegebene JS-Code nicht wirklich etwas. Es definiert nur einige (globale) Variablen. Es gibt keinen sichtbaren Inhalt, der in #videocontainer angezeigt werden kann, und der JS ruft keine Funktionen auf, die ein bestimmtes Verhalten auslösen könnten.

aber sagen, dass, wenn Sie einige JS, die Sie von einem AJAX-Aufruf erhalten laden möchten, und führen, würde ich, dass anstatt zu versuchen, die ganze script Tag mit Inhalt hinzufügen möchten, empfehlen Folgendes zu tun:

var script = document.createElement("script"); 
script.type = "text/javascript"; 
script.text = data; 
document.body.appendChild(script); 

natürlich funktioniert dies nur, wenn Sie die Daten ändern, können Sie von Ihrer AJAX-Aufruf erhalten auf diese Zeichenfolge (ohne Tags):

'z_media = "SQgeKL07Nr"; z_autoplay=false; z_width=899; z_height=506;' 

Insgesamt würde der Code wie folgt aussehen:

function videoGrabber(mirror_id, video_version, firstVideo_version, videoNumber) { 
    jQuery.post("/path/to/my/external/php/file.php", {firstParam : mirror_id, secondParam : video_version, thirdParam : firstVideo_version}, function(data) { 
     var script = document.createElement("script"); 
     script.type = "text/javascript"; 
     script.text = data; 
     document.body.appendChild(script); 
    }); 
    return false; 
} 
Verwandte Themen