Jak wywołać funkcję JavaScript z PHP?


202

Jak wywołać funkcję JavaScript z PHP?

<?php

  jsfunction();
  // or
  echo(jsfunction());
  // or
  // Anything else?

Poniższy kod jest od xyz.html (po kliknięciu przycisku) to nazywa wait()w zewnętrznym xyz.js . To wait()wywołuje wait.php.

function wait() 
{
  xmlhttp=GetXmlHttpObject();
  var url="wait.php"; \
  xmlhttp.onreadystatechange=statechanged; 
  xmlhttp.open("GET", url, true); 
  xmlhttp.send(null);
} 

function statechanged()
{ 
  if(xmlhttp.readyState==4) {
       document.getElementById("txt").innerHTML=xmlhttp.responseText;
  }
}

i czekaj.php

<?php echo "<script> loadxml(); </script>"; 

gdzie loadxml()wywołuje kod z innego pliku PHP w ten sam sposób.

W loadxml()przeciwnym razie działa dobrze, ale nie nazywa się go tak, jak tego chcę.


1
Również mój javascript i php są zewnętrzne.
Zeeshan Rang

Odpowiedzi:


362

Jeśli chodzi o PHP (a tak naprawdę ogólnie serwer WWW), strona HTML jest niczym więcej niż skomplikowanym ciągiem znaków.

Cała wymyślna praca z językiem takim jak PHP - czytanie z baz danych i usług internetowych i tak dalej - ostatecznym celem końcowym jest dokładnie ta sama podstawowa zasada: wygenerować ciąg HTML *.

Twój duży ciąg HTML nie stanie się niczym bardziej specjalnym, dopóki nie zostanie załadowany przez przeglądarkę internetową. Raz w ładunku przeglądarce strona, potem wszystkie inne magia - układ, model box Stuff generacji DOM, i wiele innych rzeczy, w tym wykonanie JavaScript.

Zatem nie „wywołujesz JavaScript z PHP”, „dołączasz wywołanie funkcji JavaScript do swojego wyniku”.

Można to zrobić na wiele sposobów, ale oto kilka.

Używając tylko PHP:

echo '<script type="text/javascript">',
     'jsfunction();',
     '</script>'
;

Wyjście z trybu php do trybu bezpośredniego wyjścia:

<?php
    // some php stuff
?>
<script type="text/javascript">
    jsFunction();
</script>

Nie musisz zwracać nazwy funkcji ani nic takiego. Przede wszystkim przestań ręcznie pisać żądania AJAX. Utrudniasz to sobie. Pobierz jQuery lub jedną z innych doskonałych platform.

Po drugie, zrozum, że będziesz już wykonywał kod javascript po otrzymaniu odpowiedzi z wywołania AJAX.

Oto przykład tego, co myślę, że robisz z AJAX jQuery

$.get(
    'wait.php',
    {},
    function(returnedData) {
        document.getElementById("txt").innerHTML = returnedData;

        //  Ok, here's where you can call another function
        someOtherFunctionYouWantToCall();

        // But unless you really need to, you don't have to
        // We're already in the middle of a function execution
        // right here, so you might as well put your code here
    },
    'text'
);

function someOtherFunctionYouWantToCall() {
    // stuff
}

Teraz, jeśli nie możesz wysyłać nazwy funkcji z PHP z powrotem do wywołania AJAX, możesz to zrobić.

$.get(
    'wait.php',
    {},
    function(returnedData) {
        // Assumes returnedData has a javascript function name
        window[returnedData]();
    },
    'text'
);

* Lub JSON lub XML itp.


2
Oczywiście istnieje również opcja łączenia w zewnętrznym pliku javascript, który wykonuje samo wywołanie ... W ten sposób możesz zachować JavaScript tam, gdzie należy, w kodzie JavaScript. =)
PatrikAkerstrand

to nie działa. próbowałem ich obu. moim programem jest .html (po kliknięciu przycisku) przechodzi do zewnętrznej funkcji .js, która ładuje plik php (za pomocą xmlhttp = GetXmlHttpObject (); var url = "phpwithmysqlwait.php"; xmlhttp.onreadystatechange = zmieniony statycznie ; xmlhttp.open ("GET", url, true); xmlhttp.send (null);) i moje wywołanie php <? php echo "<script> loadxml (); </script>"; ?> gdzie loadxml wywołuje inny php w ten sam sposób. W przeciwnym razie loadxml () działa dobrze, ale nie jest nazywany tak, jak tego chcę. czy możesz coś zasugerować
Zeeshan Rang

9
Ten facet właśnie wyjaśnił wszystko, co robiłem do tej pory.
Kacy

4
@PeterBailey Większość ludzi zwykle obraża osobę za przeprowadzenie tego dochodzenia i pozostawia to przy tym. Naprawdę dałeś mi naprawdę konstruktywną pomoc. więc dziękuję :)
Gideon Sassoon,

2
@NilsSens Dzięki za pytanie. Nadal nie rozumiesz tutaj czegoś fundamentalnego. PHP i javascript po stronie klienta nie współdziałają ze sobą bezpośrednio. HTTP jest zawsze w środku. Tak jest nawet w przypadku żądań Ajax. Aby powtórzyć to, co napisałem ponad 7 lat temu w mojej oryginalnej odpowiedzi: działając jako serwer aplikacji WWW, wszystko, co PHP robi, to generowanie ciągu HTML, który może, ale nie musi zawierać javascript.
Peter Bailey,

86

Zawsze używam echo "<script> function(); </script>";lub coś podobnego. technicznie nie wywołujesz tej funkcji w PHP, ale to tak blisko, jak to tylko możliwe.


13
Po prostu upewnij się, że umieściłeś funkcję javascript przed echem skryptu, w przeciwnym razie nie będzie można go wywołać.
Nurp

Czy możemy zwrócić dane wyjściowe echodo zmiennej w PHP?
alper

52

Obecnie (luty 2012 r.) Dostępna jest nowa funkcja. Sprawdź tutaj

Przykładowy kod (pobrany z sieci):

<?php

$v8 = new V8Js();

/* basic.js */
$JS = <<< EOT
len = print('Hello' + ' ' + 'World!' + "\\n");
len;
EOT;

try {
  var_dump($v8->executeString($JS, 'basic.js'));
} catch (V8JsException $e) {
  var_dump($e);
}

?>

To może nie pasować dokładnie do pierwotnego przypadku użycia pytania, ale pod tytułem pytania ta odpowiedź powinna mieć znacznie więcej głosów.
Chris Schmitz

4
Należy pamiętać, że wymaga to zainstalowania rozszerzenia V8Js w instalacji PHP.
Velojet

11

Nie możesz Możesz wywołać funkcję JS z HTML-a wyprowadzanego przez PHP, ale to już coś zupełnie innego.


cóż, jestem w stanie wywołać funkcję JS w następujący sposób: echo "<td onClick = loadxml ()> <i> Kliknij po szczegóły </i> </td>"; .... ale nie chcę teraz nic klikać . Chcę tylko, żeby mój php wywołał funkcję JS z dowolnym zdarzeniem.
Zeeshan Rang

2
W tym przykładzie użyto zdarzenia kliknięcia w HTML, a nie php. JavaScript jest po stronie klienta, a php po stronie serwera. Nie można bezpośrednio wywoływać JavaScript w PHP.
MrChrister

7

To nie jest możliwe. PHP jest językiem po stronie serwera i klientem JavaScript i tak naprawdę niewiele o sobie wiedzą. Będziesz potrzebował interpretera JavaScript po stronie serwera (takiego jak Aptanas Jaxer). Być może tak naprawdę chcesz użyć architektury typu Ajax (funkcja JavaScript wywołuje skrypt PHP asynchronicznie i robi coś z wynikiem).

<td onClick= loadxml()><i>Click for Details</i></td>

function loadxml()
{
    result = loadScriptWithAjax("/script.php?event=button_clicked");
    alert(result);
}

// script.php
<?php
    if($_GET['event'] == 'button_clicked')
        echo "\"You clicked a button\"";
?>

7

Jeśli chcesz wysłać echo do późniejszego wykonania, jest w porządku

Jeśli chcesz uruchomić JS i użyć wyników w PHP, użyj V8JS

V8Js::registerExtension('say_hi', 'print("hey from extension! "); var said_hi=true;', array(), true);
$v8 = new V8Js();
$v8->executeString('print("hello from regular code!")', 'test.php');
$v8->executeString('if (said_hi) { print(" extension already said hi"); }');

Możesz odwołać się tutaj w celu uzyskania dalszych informacji: Jakie są rozszerzenia w php v8js?

Jeśli chcesz uruchomić HTML i JS i użyć danych wyjściowych w PHP http://htmlunit.sourceforge.net/ to twoje rozwiązanie


3

PHP działa na serwerze. JavaScript działa w kliencie. Więc php nie może wywołać funkcji JavaScript.


11
Ściśle mówiąc, to nie prawda. Istnieje również JavaScript po stronie serwera i teoretycznie możesz mieć zarówno PHP, jak i JavaScript działające na serwerze i wywołujące się nawzajem. W praktyce jest to bardzo mało prawdopodobny scenariusz.
Michael Borgwardt,

2

możesz spróbować tego również:

    public function PHPFunction()
    {
            echo '<script type="text/javascript">
                 test();
            </script>'; 
    }
    <script type="text/javascript">
    public function test()
    {
        alert('In test Function');
    }
    </script>

-1, ponieważ to nie zadziała. Wywołujesz i definiujesz te funkcje podnoszenia w dwóch osobnych blokach. Przeczytaj to i to
Siraj Alam,

2

spróbuj tak

<?php
 if(your condition){
     echo "<script> window.onload = function() {
     yourJavascriptFunction(param1, param2);
 }; </script>";
?>

1

Możesz nie być w stanie tego zrobić bezpośrednio, ale biblioteka Xajax jest bardzo blisko tego, czego chcesz. Pokażę na przykładzie. Oto przycisk na stronie internetowej:

<button onclick="xajax_addCity();">Add New City</button> 

Naszym intuicyjnym przypuszczeniem byłoby, że xajax_addCity()jest to funkcja JavaScript, prawda? Cóż, dobrze i źle. Fajną rzeczą, na którą pozwala Xajax, jest to, że nie mamy żadnej wywoływanej funkcji JS xajax_addCity(), ale mamy wywoływaną funkcję PHP, addCity()która może robić cokolwiek PHP!

<?php function addCity() { echo "Wow!"; } ?>

Pomyśl o tym przez chwilę. Praktycznie wywołujemy funkcję PHP z kodu JavaScript! Ten zbyt uproszczony przykład miał pobudzić apetyt. Lepszym wyjaśnieniem jest strona Xajax, baw się dobrze!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.