Pergunta

Como chamar uma função JavaScript do PHP?

<?php

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

O código a seguir é de xyz.html (em um clique de botão) que chama de wait() em um link externo xyz.js . Este wait() chamadas 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;
  }
}

e wait.php

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

onde loadxml() chama o código de outro arquivo PHP da mesma maneira.

O loadxml() é bom trabalhar de outra forma, mas não está sendo chamado o jeito que eu quero.

Foi útil?

Solução

Quanto PHP está em causa (ou realmente, um servidor web em geral), uma página HTML não é nada mais complicado do que um grande string.

Todo o trabalho de fantasia que você pode fazer com a linguagem como PHP - a leitura de bancos de dados e serviços web e tudo isso - o objetivo final final é exatamente o mesmo princípio básico:. Gerar uma seqüência de HTML *

Seu string HTML grande não se torna nada mais especial do que isso até que ele é carregado por um navegador web. Uma vez que um navegador carrega a página, então todas as outras magia acontece -. Layout, material modelo de caixa, geração DOM, e muitas outras coisas, incluindo a execução de JavaScript

Assim, você não "chamar JavaScript do PHP", você "incluem uma chamada de função JavaScript na sua saída".

Existem muitas maneiras de fazer isso, mas aqui são um casal.

Usando apenas PHP:

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

Escapando de modo php para o modo de saída direta:

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

Você não precisa retornar um nome de função ou qualquer coisa assim. Primeiro de tudo, parar de escrever solicitações de AJAX por mão. Você está fazendo isso só dura consigo mesma. Obter jQuery ou um dos outros quadros excelentes lá fora.

Em segundo lugar, entender que você já vai estar executando código javascript uma vez que a resposta é recebida a chamada AJAX.

Aqui está um exemplo do que eu acho que você está fazendo com AJAX do 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
}

Agora, se você está morto-set sobre o envio de um nome de função de PHP de volta para a chamada AJAX, você pode fazer isso também.

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

* Ou JSON ou XML etc.

Outras dicas

Eu sempre apenas usar echo "<script> function(); </script>"; ou algo similar. você não está tecnicamente chamar a função em PHP, mas isso tão perto como o vai conseguir.

Por agora (fevereiro de 2012) há um novo recurso para isso. Verifique aqui

Exemplo de código (tirado da 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);
}

?>

Você não pode. Você pode chamar uma função JS de HTML emitido por PHP, mas isso é um todo 'nother coisa.

Se você quiser eco-lo para fora para execução posterior é ok

Se você quiser executar o JS e usar os resultados em uso PHP 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"); }');

Você pode consultar aqui para referência futura: Quais são extensões em v8js php?

Se você quer executar HTML e JS e usar a saída em PHP http://htmlunit.sourceforge.net/ é a sua solução

Isso não é possível. PHP é uma linguagem do lado do servidor e do lado do cliente JavaScript e eles realmente não sei muito sobre o outro. Você precisaria de um server-side JavaScript Interpreter (como Aptanas Jaxer). Talvez o que você realmente quer fazer é usar um Ajax como Arquitetura (função JavaScript chama script PHP de forma assíncrona e faz algo com o resultado).

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

PHP é executado no servidor. JavaScript é executado no cliente. Então php não pode chamar uma função JavaScript.

Você pode tentar este também: -

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

Tente como este

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

Você pode não ser capaz de fazer diretamente este, mas a xajax biblioteca é muito parecido com o que você quer. Vou demonstrar com um exemplo. Está aqui um botão em uma página web:

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

Nosso palpite intuitivo seria que xajax_addCity() é uma função JavaScript, certo? Bem, o certo eo errado. A coisa legal xajax permite é que não temos nenhum JS função chamada xajax_addCity(), mas o que temos é uma função PHP chamada addCity() que pode fazer o PHP faz!

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

Pense nisso por um minuto. Estamos praticamente chamando uma função PHP a partir do código Javascript! Esse exemplo mais simplificada foi apenas para aguçar o apetite, uma explicação melhor é no site da xajax, divirta-se!

Se você quiser chamada de método dentro eco você tem que colocá-los em aspas simples:

    function f() {
      //code
      alert("its calling from echo ");
    }

    echo "<td onclick='f();'>".Method calling."</td>";
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top