Bagaimana cara memanggil fungsi JavaScript dari PHP?

202

Bagaimana cara memanggil fungsi JavaScript dari PHP?

<?php

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

Kode berikut ini berasal dari xyz.html (pada klik tombol) ia memanggil wait()dalam xyz.js eksternal . Ini wait()memanggil 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;
  }
}

dan tunggu.php

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

di mana loadxml()memanggil kode dari file PHP lain dengan cara yang sama.

Sebaliknya loadxml()berfungsi dengan baik, tetapi tidak disebut seperti yang saya inginkan.

Zeeshan Rang
sumber
1
Juga javascript dan php saya bersifat eksternal.
Zeeshan Rang

Jawaban:

362

Sejauh menyangkut PHP (atau sebenarnya, server web pada umumnya), halaman HTML tidak lebih rumit dari string besar.

Semua pekerjaan mewah yang dapat Anda lakukan dengan bahasa seperti PHP - membaca dari basis data dan layanan web dan semua itu - tujuan akhir utama adalah prinsip dasar yang sama persis: menghasilkan string HTML *.

String HTML besar Anda tidak menjadi sesuatu yang lebih istimewa dari itu sampai dimuat oleh browser web. Setelah browser memuat halaman, maka semua keajaiban lainnya terjadi - tata letak, model kotak, pembuatan DOM, dan banyak hal lainnya, termasuk eksekusi JavaScript.

Jadi, Anda tidak "memanggil JavaScript dari PHP", Anda "memasukkan panggilan fungsi JavaScript dalam output Anda".

Ada banyak cara untuk melakukan ini, tetapi di sini ada pasangan.

Hanya menggunakan PHP:

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

Lolos dari mode php ke mode keluaran langsung:

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

Anda tidak perlu mengembalikan nama fungsi atau semacamnya. Pertama-tama, berhentilah menulis permintaan AJAX dengan tangan. Anda hanya mempersulit diri sendiri. Dapatkan jQuery atau salah satu kerangka kerja luar biasa lainnya di luar sana.

Kedua, pahami bahwa Anda sudah akan menjalankan kode javascript setelah respons diterima dari panggilan AJAX.

Berikut adalah contoh dari apa yang saya pikir Anda lakukan dengan 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
}

Sekarang, jika Anda tidak dapat mengirim nama fungsi dari PHP kembali ke panggilan AJAX, Anda dapat melakukannya juga.

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

* Atau JSON atau XML dll.

Peter Bailey
sumber
2
Tentunya ada juga opsi untuk menautkan dalam file javascript eksternal yang melakukan panggilan itu sendiri ... Dengan cara itu Anda menjaga JavaScript di tempatnya, dalam kode JavaScript. =)
PatrikAkerstrand
ini tidak bekerja. Saya mencoba keduanya. tindak lanjut dari program saya adalah, dari .html (pada tombol klik) ia pergi ke fungsi .js eksternal yang memuat file php (menggunakan xmlhttp = GetXmlHttpObject (); var url = "phpwithmysqlwait.php"; xmlhttp.onreadystatechange = statechanged ; xmlhttp.open ("GET", url, true); xmlhttp.send (null);) dan panggilan php saya <? php echo "<script> loadxml (); </script>"; ?> di mana loadxml memanggil php lain dengan cara yang sama. Loadxml () berfungsi dengan baik jika tidak, tetapi tidak dipanggil seperti yang saya inginkan. dapatkah Anda menyarankan sesuatu
Zeeshan Rang
9
Orang ini membuat semua yang saya lakukan sampai sekarang menjadi sangat jelas.
Kacy
4
@PeterBailey Kebanyakan orang biasanya akan menghina orang yang melakukan penyelidikan ini dan membiarkannya begitu saja. Anda benar-benar memberi saya bantuan yang sangat konstruktif. jadi terima kasih :)
Gideon Sassoon
2
@NilsSens Terima kasih atas pertanyaan Anda. Anda masih salah paham tentang sesuatu yang mendasar di sini. PHP dan javascript sisi klien tidak berinteraksi dengan satu sama lain secara langsung. HTTP selalu di tengah. Bahkan dengan permintaan Ajax itulah masalahnya. Untuk mengulangi apa yang saya tulis sekarang lebih dari 7 tahun yang lalu dalam jawaban asli saya: ketika berfungsi sebagai server aplikasi web, semua yang dilakukan PHP adalah menghasilkan string HTML, yang mungkin atau mungkin tidak termasuk javascript.
Peter Bailey
86

Saya selalu hanya menggunakan echo "<script> function(); </script>";atau yang serupa. Anda tidak secara teknis memanggil fungsi dalam PHP, tetapi ini sedekat yang Anda dapatkan.

GSto
sumber
13
Pastikan untuk menempatkan fungsi javascript sebelum skrip yang di-echo, atau tidak dapat dipanggil.
Nurp
Bisakah kita mengembalikan output echomenjadi variabel dalam PHP?
alper
52

Per sekarang (Februari 2012) ada fitur baru untuk ini. Periksa di sini

Contoh kode (diambil dari web):

<?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);
}

?>
bertzzie
sumber
Ini mungkin tidak cocok dengan kasus penggunaan pertanyaan asli, tetapi dengan judul pertanyaan jawaban ini seharusnya memiliki lebih banyak suara.
Chris Schmitz
4
Perlu diketahui bahwa ini memerlukan menginstal ekstensi V8Js ke instalasi PHP Anda.
Velojet
11

Kamu tidak bisa Anda dapat memanggil fungsi JS dari HTML yang dihasilkan oleh PHP, tapi itu hal yang penting.

Matthew Flaschen
sumber
baik saya dapat memanggil fungsi JS seperti ini: echo "<td onClick = loadxml ()> <i> Klik untuk Detail </i> </td>"; .... tetapi saya tidak ingin mengklik apa pun sekarang . saya hanya ingin php saya memanggil fungsi JS dengan acara apa pun.
Zeeshan Rang
2
Contoh itu menggunakan acara klik dalam HTML, bukan php. JavaScript adalah sisi klien dan php adalah sisi server. Anda tidak dapat langsung memanggil JavaScript dengan PHP.
MrChrister
7

Itu tidak mungkin. PHP adalah bahasa sisi Server dan sisi klien JavaScript dan mereka tidak benar-benar tahu banyak tentang satu sama lain. Anda akan membutuhkan Penerjemah JavaScript sisi-server (seperti Aptanas Jaxer). Mungkin yang sebenarnya ingin Anda lakukan adalah menggunakan Arsitektur seperti Ajax (fungsi JavaScript memanggil skrip PHP secara tidak sinkron dan melakukan sesuatu dengan hasilnya).

<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\"";
?>
Daff
sumber
7

Jika Anda ingin mengulanginya untuk eksekusi nanti, tidak apa-apa

Jika Anda ingin mengeksekusi JS dan menggunakan hasilnya di PHP, gunakan 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"); }');

Anda dapat merujuk di sini untuk referensi lebih lanjut: Apa itu Ekstensi dalam php v8js?

Jika Anda ingin mengeksekusi HTML & JS dan menggunakan output di PHP http://htmlunit.sourceforge.net/ adalah solusi Anda

Pian0_M4n
sumber
3

PHP berjalan di server. JavaScript berjalan di klien. Jadi php tidak dapat memanggil fungsi JavaScript.

Daniel Moura
sumber
11
Sebenarnya, itu tidak benar. Ada juga JavaScript sisi-server dan Anda secara teoritis bisa membuat PHP dan JavaScript berjalan di server dan saling memanggil. Dalam praktiknya, itu atau skenario tentu saja sangat tidak mungkin.
Michael Borgwardt
2

Anda dapat mencoba yang ini juga: -

    public function PHPFunction()
    {
            echo '<script type="text/javascript">
                 test();
            </script>'; 
    }
    <script type="text/javascript">
    public function test()
    {
        alert('In test Function');
    }
    </script>
umesh
sumber
-1 karena ini tidak akan berhasil. Anda memanggil dan mendefinisikan fungsi mengangkat ini dalam dua blok terpisah. Baca ini dan ini
Siraj Alam
2

coba seperti ini

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

Anda mungkin tidak dapat langsung melakukan ini, tetapi perpustakaan Xajax cukup dekat dengan apa yang Anda inginkan. Saya akan menunjukkan dengan sebuah contoh. Berikut tombol di halaman web:

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

Tebakan intuitif kami xajax_addCity()adalah fungsi Javascript, bukan? Ya benar dan salah. Yang keren yang Xajax perbolehkan adalah kita tidak memiliki fungsi JS apa pun yang dipanggil xajax_addCity(), tetapi yang kita miliki adalah fungsi PHP yang disebut addCity()yang dapat melakukan apa pun yang dilakukan PHP!

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

Pikirkan dulu sebentar. Kami sebenarnya menjalankan fungsi PHP dari kode Javascript! Contoh yang terlalu disederhanakan itu hanya untuk membangkitkan selera, penjelasan yang lebih baik ada di situs Xajax, bersenang-senang!

Hamman Samuel
sumber