2013-08-30 14 views
5

Więc w zasadzie używam postu jQuery do wykonania wywołania ajax na zewnętrzną stronę php, a następnie echo wyniku, a następnie wyświetlić go na aktualnej stronie.Kod javascript jest zwracany przez ajax, ale nie wyświetla się

Problem polega na tym, że za każdym razem, gdy zewnętrzna strona php zwraca trochę javascriptu, nie jest wyświetlana na aktualnej stronie.

JavaScript zwracane

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

Moje 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; 
} 

Teraz ogólnie, gdy są zwracane iframe, wykazują perfekcyjnie w #videoContainer id jednak, gdy ten kod javascript embed jest zwracane, nie wyświetla nic w identyfikatorze #videoContainer. Ale mogę zdecydowanie potwierdzić, że zewnętrzna strona php zwraca dane, ponieważ widzę je w konsoli. Jak mogę to naprawić?

+0

Czy możesz spróbować 'console.log (data)' ..? – ErickBest

+0

Czego oczekujesz w "# videoContainer"? Twój skrypt JS ma tylko kilka zmiennych ... nie ma widocznej treści i nic, co wywołuje funkcję JS. – Steve

Odpowiedz

2

spróbować dodać eval() faktycznie uruchomić kod Javascript jesteś pobierania:

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 być pewien, masz dobry security-- eval() ma duży potencjał do chaosu, jeśli ktoś może przechwycić wywołanie ajax i wstrzyknąć własny kod.

Aha, i od eval() ma zamiar starać się ocenić tylko kodu JavaScript, musisz zmienić swój kod zwrotny po prostu surowy kod JS (nie <script> tags):

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

Jedyną rzeczą do czynienia ze jest to:

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

można dołączyć ten skrypt na stronie wywołującego (jednego z kodem Ajax), a następnie wywołać go z kodu można uzyskać za pośrednictwem ajax? Więc kod ajax ostatecznie coś takiego powrotu:

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

Z jakiegoś dziwnego powodu, otrzymuję ten błąd 'Uncaught SyntaxError: Nieoczekiwany token <'. Nie do końca jasne, dlaczego, dodałem tylko 'eval (dane);' – Maaz

+0

czy eval (data) powinien zostać umieszczony przed (#videoContainer) .html (dane)? – Maaz

+0

Próbuje zinterpretować kod JS, zaczynając od "

0

Na litość papieru wartościowego, chciałbym uniknąć zainteresowanie poza JavaScript, a następnie uruchomić go na ślepo, eval lub w inny sposób. Gdybym był tobą, zwróciłbym te zmienne w obiekcie JSON. Jeśli chodzi o dodatkowy skrypt, mam to już załadowane i po prostu zadzwoń, kiedy go potrzebuję.

Wspominasz o powracających elementach iframe i ich działaniu. Czy chcesz powiedzieć, że twój plik php może zwrócić dowolny kod HTML, aby bezpośrednio wstawić go do swojej #videoContainer? Chciałbym również tego uniknąć. Dane zwrócone przez żądanie AJAX właśnie zakończyły przechodzenie przez nieznane terytorium: internet. Lepsza struktura może pomóc w zapobieganiu atakom MITM lub XSS.

+0

Używam wordpress. Stworzyłem funkcję w pliku functions.php, zewnętrzny plik php uruchamia właśnie tę funkcję. – Maaz

0

Jak już wspomniałem w powyższym komentarzu, Twój zwrócony kod JS naprawdę nic nie robi. Określa tylko kilka (globalnych) zmiennych. Nie ma widocznej treści, która mogłaby pojawić się w #videocontainer, a JS nie wywoływał żadnych funkcji, które mogłyby wywołać pewne zachowanie.

W takiej sytuacji, jeśli chcesz, aby załadować i wykonać pewne JS, które można uzyskać z wywołania AJAX, polecam, że zamiast próbować dodać cały script tag z treścią, aby wykonać następujące czynności:

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

oczywiście to działa tylko jeśli można zmieniać dane otrzymane od wywołania AJAX do tego łańcucha (bez tagów):

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

sumie Twój kod będzie wyglądać następująco:

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; 
} 
Powiązane problemy