3 Stimmen

wie man ein Ajax-Ausgabeskript ausführt

Ich erhalte eine Ajax-Ausgabe von Erfolgsdaten.

Die Daten enthalten einen HTML-Text und ein Skript.

Aber das Skript wird nicht ausgeführt, wie kann ich das Skript ausführen.

Angenommen, die Ajax-Antwort obj ist

<div>something....</div><script>alert("test");</script>

Der obige Code ist meine Ajax-Antwort. das div wird gerendert, aber die Warnung funktioniert nicht.

2voto

Russ Punkte 3590

Unter der Annahme, dass Sie nicht mit JSON oder jQuery, oder eine andere Bibliothek, und Ihre AJAX-Aufruf gibt einige HTML-und / oder Javascript, die hinzugefügt wird, um Ihre bestehenden Dokument (zB mit innerHTML), Javascript zurückgegeben mit AJAX wird nicht im Browser ausgeführt - mit Ausnahme der Ereignisse auf Elemente in der HTML.

Wenn Ihr AJAX-Aufruf also Folgendes zurückgibt <input type="button" value="Click me" onclick="alert('hello');" /> funktioniert die js-Warnung einwandfrei, aber wenn Ihr AJAX-Aufruf Folgendes zurückgibt <script type="text/javascript">alert('hello');</script> wird er nicht ausgeführt. In diesem Fall müssten Sie das Ergebnis parsen, um das Javascript zu extrahieren und auszuführen, indem Sie eine Funktion wie die folgende verwenden:

function extract_and_execute_js(output_to_parse)
{    
    if(output_to_parse != '')    
    {    
        var script = "";
        output_to_parse = output_to_parse.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, function(){if (output_to_parse !== null) script += arguments[1] + '\n';return '';});
        if(script) 
        {
            if (window.execScript)
            {
                window.execScript(script);
            }
            else
            {
                window.setTimeout(script, 0);
            }
        }
    }
}

1voto

RameshVel Punkte 62428

Wenn Sie das JSON-formatierte Ergebnis von einem AJAX-Aufruf abrufen, können Sie einfach eval um das Javascript auszuführen.

Angenommen, das Ergebnis json wird wie folgt gebildet

   var res =  '{"Data": "<something>",
              "script": "alert(something)"}';

   var out = eval("(" + res + ")");
   var data = out.data;
   eval(out.script);

1voto

Alexis Wilke Punkte 16966

Interessanterweise verwende ich jQuery, und die Verwendung der Funktion html() reichte aus, um das JavaScript zur Ausführung zu bringen. Ich hatte also mehr oder weniger nichts Besonderes zu tun.

Es gibt eine vereinfachte Version:

var myform = $('form#form-id');
$.post(myform.attr('action'), myform.serialize(), function(response) {
  $('#some-id').html(response.message);
}

In meinem Fall trat der Code automatisch in Kraft, so dass ich keine weitere der hier vorgeschlagenen Lösungen benötigte.

0voto

D'Arcy Rittich Punkte 159655

Ich bin mir nicht sicher, ob Sie eine Bibliothek verwenden, aber mit Prototype musste ich die

evalScripts: true

bevor JavaScript ausgewertet wird. Siehe hier für weitere Informationen:

http://www.sergiopereira.com/articles/prototype.js.html#UsingAjaxRequest

0voto

James Black Punkte 41034

Mit jQuery hier ist ein einfaches Stück Code:

$.ajax({
    type: "POST",
    url: "getData.asmx/HelloWorld",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(result) {
        alert(result);
    }
});

Aber um die Ergebnisse der Variablen result tatsächlich zu verwenden, habe ich eine Javascript-Bibliothek verwendet, von http://www.json.org/js.html habe ich:

success: function(result) {
    var myData = JSON.parse(result.d);

Wahrscheinlich gibt es bessere Methoden, aber diese war einfach und hat bei mir funktioniert, also verwende ich sie einfach. Später, wenn das Projekt in Produktion ist, kann ich zurückgehen und dies bereinigen, aber das ist, nachdem ich alles funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X