PHP'den JavaScript işlevi nasıl çağrılır?


204

PHP'den JavaScript işlevi nasıl çağrılır?

<?php

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

Aşağıdaki kod xyz.html'den (bir düğme tıklamasıyla) wait()harici bir xyz.js'de a olarak adlandırılır . Buna wait()wait.php denir.

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

ve bekleyin. php

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

burada loadxml()başka bir PHP dosyasındaki kodu aynı şekilde çağırır.

loadxml()Aksi iyi çalışıyor, ama bunu istediğiniz şekilde çağrıldığını değildir.


1
Ayrıca benim javascript ve php harici.
Zeeshan Rang

Yanıtlar:


363

PHP söz konusu olduğunda (ya da genel olarak bir web sunucusuyla), bir HTML sayfası büyük bir dizeden daha karmaşık bir şey değildir.

PHP gibi dil ile yapabileceğiniz tüm süslü çalışmalar - veritabanlarından ve web servislerinden okuma ve tüm bunlar - nihai hedef aynı temel prensiptir: bir HTML dizesi oluşturun *.

Büyük HTML dizeniz, bir web tarayıcısı tarafından yüklenene kadar bundan daha özel bir şey olmaz. Bir tarayıcı sayfayı yükledikten sonra , diğer tüm sihir gerçekleşir - düzen, kutu modeli şeyler, DOM oluşturma ve JavaScript yürütme dahil olmak üzere diğer birçok şey.

Yani, "PHP'den JavaScript çağırmayın", "çıktınıza bir JavaScript işlev çağrısı eklersiniz".

Bunu yapmanın birçok yolu var, ama işte bir çift.

Sadece PHP kullanarak:

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

Php modundan doğrudan çıkış moduna kaçmak:

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

Bir işlev adı veya bunun gibi bir şey döndürmeniz gerekmez. Her şeyden önce, AJAX isteklerini elle yazmayı bırakın. Sadece kendini zorlatırsın. JQuery veya diğer mükemmel çerçevelerden birini alın.

İkinci olarak, AJAX çağrısından yanıt alındıktan sonra zaten javascript kodunu yürüteceğinizi anlayın.

İşte jQuery'nin AJAX ile ne yaptığınızı düşünüyorum

$.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
}

Şimdi, PHP'den AJAX çağrısına bir işlev adı gönderme konusunda kararsızsanız, bunu da yapabilirsiniz.

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

* Veya JSON veya XML vb.


2
Elbette aramayı yapan harici bir javascript dosyasına bağlanma seçeneği de var ... Bu şekilde JavaScript'i ait olduğu yerde JavaScript kodunda tutuyorsunuz. =)
PatrikAkerstrand

bu çalışmıyor. ikisini de denedim. benim program takip, .html (düğme tıklama) bir php dosyası (xmlhttp = GetXmlHttpObject () kullanarak harici bir .js işlevine gider; var url = "phpwithmysqlwait.php"; xmlhttp.onreadystatechange = statechanged ; xmlhttp.open ("GET", url, true); xmlhttp.send (null);) ve php çağrım <? php echo "<script> loadxml (); </script>"; ?> Burada loadxml başka bir php'yi aynı şekilde çağırır. Loadxml () aksi halde iyi çalışıyor, ancak istediğim şekilde çağrılmıyor. bir şey önerebilir misiniz
Zeeshan Rang

9
Bu adam şimdiye kadar yaptığım her şeyi çok netleştirdi.
Kacy

4
@PeterBailey Çoğu insan genellikle bu soruşturmayı yapmak için kişiye hakaret eder ve bu konuda bırakır. Bana gerçekten yapıcı yardım verdin. çok teşekkür ederim :)
Gideon Sassoon

2
@NilsSens Sorunuz için teşekkürler. Burada hala temel bir şeyi yanlış anlıyorsunuz. PHP ve istemci tarafı javascript birbirleriyle doğrudan etkileşime girmez. HTTP her zaman ortadadır. Ajax isteklerinde bile durum böyle. 7 yıl önce orijinal cevabımda yazdıklarımı tekrarlamak için: bir web uygulaması sunucusu olarak çalışırken, tüm PHP'nin yaptığı javascript içerebilen veya içermeyen bir HTML dizesi üretiyor.
Peter Bailey

86

Ben her zaman sadece echo "<script> function(); </script>";benzer bir şey kullanırım . teknik olarak PHP'de işlevi çağırmak değil, ama bu kadar yakın olacak.


13
Javascript işlevini yankılanan komut dosyasının önüne yerleştirdiğinizden emin olun , aksi takdirde çağrılamaz.
Nurp

Çıktısını echobir değişkene geri döndürebilir miyiz PHP?
alper

52

Şimdilik (Şubat 2012) bunun için yeni bir özellik var. Buradan kontrol edin

Kod örneği (web'den alınmıştır):

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

?>

Bu, orijinal sorunun kullanım durumuna tam olarak uymayabilir, ancak soru başlığına giderek bu cevabın daha fazla oyu olmalıdır.
Chris Schmitz

4
Bunun, V8Js uzantısını PHP kurulumunuza yüklemesini gerektirdiğini unutmayın.
Velojet

11

Yapamazsın. Sen HTML bir JS işlevi çağırabilir outputted PHP tarafından değil o şey nother' bir bütün bu.


iyi ben böyle bir JS işlevini çağırabiliyorum: echo "<td onClick = loadxml ()> <i> Ayrıntılar için Tıklayın </i> </td>"; .... ama şimdi bir şey tıklamak istemiyorum . Ben sadece benim php herhangi bir olay ile bir JS işlevi çağırmak istiyorum.
Zeeshan Rang

2
Bu örnek php değil, HTML'de bir click olayı kullanıyor. JavaScript istemci ve php sunucu tarafıdır. JavaScript'i PHP ile doğrudan arayamazsınız.
MrChrister

7

Bu mümkün değil. PHP bir Sunucu tarafı dil ve JavaScript istemci tarafıdır ve birbirleri hakkında çok fazla şey bilmiyorlar. Sunucu taraflı bir JavaScript Yorumlayıcısına (Aptanas Jaxer gibi) ihtiyacınız olacaktır. Belki de aslında yapmak istediğiniz şey Mimari gibi bir Ajax kullanmaktır (JavaScript işlevi PHP betiğini eşzamansız olarak çağırır ve sonuçla bir şeyler yapar).

<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

Daha sonra yürütmek için yankılamak istiyorsanız sorun değil

JS'yi yürütmek ve sonuçları PHP'de kullanmak istiyorsanız V8JS kullanın

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"); }');

Daha fazla referans için buraya başvurabilirsiniz: php v8js'deki Uzantılar nedir?

HTML ve JS yürütmek ve çıktıyı PHP'de kullanmak istiyorsanız çözüm http://htmlunit.sourceforge.net/


3

PHP sunucuda çalışır. JavaScript istemcide çalışır. Yani php bir JavaScript fonksiyonunu çağıramaz.


11
Açıkçası, bu doğru değil. Ayrıca sunucu tarafı JavaScript var ve teorik olarak hem PHP hem de JavaScript'in bir sunucuda çalışmasını ve birbirini çağırmasını sağlayabilirsiniz. Pratikte, ya da tabii ki çok düşük bir senaryo.
Michael Borgwardt

2

bunu da deneyebilirsiniz: -

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

-1 işe yaramaz. Bu kaldırma fonksiyonlarını iki ayrı blokta çağırıyor ve tanımlıyorsunuz. Bunu ve bunu
Siraj Alam

2

böyle dene

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

1

Bunu doğrudan yapamayabilirsiniz, ancak Xajax kütüphanesi istediğiniz şeye oldukça yakındır. Bir örnekle göstereceğim. İşte web sayfasındaki bir düğme:

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

Sezgisel tahminimiz bu xajax_addCity()bir Javascript işlevi, değil mi? Doğru, yanlış. Xajax'ın izin verdiği harika şey, herhangi bir JS fonksiyonuna sahip olmamamızdır xajax_addCity(), ancak elimizdeki şey addCity()PHP'nin yaptığı her şeyi yapabilen bir PHP fonksiyonudur !

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

Bir dakika düşünün. Javascript kodundan neredeyse bir PHP fonksiyonu çağırıyoruz! Bu aşırı basitleştirilmiş örnek sadece iştahı düzeltmekti, Xajax sitesinde daha iyi bir açıklama var, iyi eğlenceler!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.