PHP에서 JavaScript 함수를 호출하는 방법?


202

PHP에서 JavaScript 함수를 호출하는 방법?

<?php

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

다음 코드는 xyz.html (버튼 클릭시) wait()에서 외부 xyz.js 에서 a 를 호출합니다 . 이것은 wait()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;
  }
}

그리고 wait.php

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

여기서 loadxml()같은 방법으로 다른 PHP 파일의 코드를 호출합니다.

loadxml()달리 잘 작동되지만 내가 원하는 방식으로 호출되지 않습니다.


1
또한 내 자바 스크립트와 PHP는 외부입니다.
Zeeshan Rang 2016

답변:


362

PHP에 관한 한 (또는 실제로는 웹 서버) HTML 페이지는 큰 문자열보다 복잡하지 않습니다.

데이터베이스와 웹 서비스에서 읽는 PHP와 같은 언어로 할 수있는 모든 멋진 작업-궁극적 인 최종 목표는 정확히 동일한 기본 원칙입니다 : HTML * 문자열 생성.

큰 HTML 문자열은 웹 브라우저에 의해로드 될 때까지 그보다 특별한 것이 아닙니다. 브라우저 페이지가로드되면 다음 레이아웃, 박스 모델 물건, DOM 생성 및 자바 스크립트 실행을 포함한 다른 많은 것들 - 다른 모든 마법이 발생합니다.

따라서 "PHP에서 JavaScript를 호출"하지 말고 "출력에 JavaScript 함수 호출을 포함"하십시오.

이를 수행하는 방법에는 여러 가지가 있지만 여기에 몇 가지가 있습니다.

PHP 만 사용 :

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

PHP 모드에서 직접 출력 모드로 탈출 :

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

함수 이름이나 그와 비슷한 것을 반환 할 필요가 없습니다. 우선, AJAX 요청을 직접 작성하지 마십시오. 당신은 자신을 힘들게 만들고 있습니다. jQuery 또는 다른 우수한 프레임 워크 중 하나를 얻으십시오.

둘째, AJAX 호출에서 응답을 받으면 이미 JavaScript 코드를 실행 중임을 이해하십시오.

다음은 jQuery의 AJAX로 수행하고 있다고 생각하는 예입니다.

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

이제 함수 이름을 PHP에서 AJAX 호출로 다시 보내는 데 어려움을 겪고 있다면 그렇게 할 수 있습니다.

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

* 또는 JSON 또는 XML 등


2
물론 호출 자체를 수행하는 외부 자바 스크립트 파일에서 링크하는 옵션도 있습니다 ... JavaScript 코드에서 JavaScript가 속한 곳에 보관하십시오. =)
PatrikAkerstrand

작동하지 않습니다. 나는 둘 다 시도했다. 내 프로그램의 다음은 .html (버튼 클릭시)에서 외부 .js 함수로 이동하여 PHP 파일을로드합니다 (xmlhttp = GetXmlHttpObject (); var url = "phpwithmysqlwait.php"사용; xmlhttp.onreadystatechange = statechanged ; xmlhttp.open ( "GET", url, true); xmlhttp.send (null);) 및 내 PHP 호출 <? php echo "<script> loadxml (); </ script>"; ?> 여기서 loadxml은 다른 PHP를 같은 방식으로 호출합니다. 그렇지 않으면 loadxml ()이 제대로 작동하지만 원하는 방식으로 호출되지 않습니다. 당신은 뭔가를 제안 할 수 있습니다
Zeeshan Rang

9
이 사람은 내가 지금까지 해왔 던 모든 것을 지금까지 분명하게 만들었습니다.
Kacy

4
@PeterBailey 대부분의 사람들은 일반적으로이 질문을 한 사람을 모욕하고 그 곳에 두게됩니다. 당신은 실제로 정말 건설적인 도움을 줬습니다. 감사합니다 :)
Gideon Sassoon

2
@NilsSens 질문 해 주셔서 감사합니다. 당신은 여전히 ​​기본적인 것을 오해합니다. PHP와 클라이언트 측 자바 스크립트는 서로 직접 상호 작용하지 않습니다. HTTP는 항상 중간에 있습니다. Ajax 요청에서도 마찬가지입니다. 7 년 전에 필자가 원래의 대답으로 지금 쓴 것을 반복해서 말하면 웹 응용 프로그램 서버로 작동 할 때 모든 PHP는 HTML 문자열을 생성합니다.이 문자열은 javascript를 포함하거나 포함하지 않을 수 있습니다.
Peter Bailey

86

나는 항상 그냥 echo "<script> function(); </script>";비슷한 것을 사용 합니다. PHP에서 기술적으로 함수를 호출하지는 않지만 얻을 수있는 한 가깝습니다.


13
반향 된 스크립트 앞에 javascript 함수를 배치하십시오 . 그렇지 않으면 호출 할 수 없습니다.
Nurp

의 출력을 echo변수로 반환 할 수 있습니까 PHP?
alper

52

현재 (2012 년 2 월)이를위한 새로운 기능이 있습니다. 여기를 확인 하십시오

코드 샘플 (웹에서 가져옴) :

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

?>

이것은 원래 질문의 사용 사례에 정확하게 맞지 않을 수도 있지만 질문 제목으로 가면이 답변에 더 많은 투표권이 있어야합니다.
Chris Schmitz

4
PHP 설치에 V8Js 확장을 설치해야합니다.
Velojet

11

당신은 할 수 없습니다. PHP가 출력 한 HTML에서 JS 함수를 호출 할 수 있지만, 그것은 완전히 다른 것입니다.


글쎄, 나는 다음과 같은 JS 함수를 호출 할 수있다 : 에코 "<td onClick = loadxml ()> <i> 세부 정보를 클릭하십시오 </ i> </ td>"; ....하지만 지금 아무것도 클릭하고 싶지 않습니다. . 내 PHP가 모든 이벤트에서 JS 함수를 호출하기를 원합니다.
Zeeshan Rang

2
이 예제는 PHP가 아닌 HTML에서 클릭 이벤트를 사용하고 있습니다. JavaScript는 클라이언트 측이고 PHP는 서버 측입니다. PHP로 JavaScript를 직접 호출 할 수 없습니다.
MrChrister 2016 년

7

그건 불가능하다. PHP는 서버 측 언어 및 JavaScript 클라이언트 측이며 실제로 서로에 대해 많이 알지 못합니다. Aptanas Jaxer와 같은 서버 측 JavaScript 인터프리터가 필요합니다. 어쩌면 실제로 원하는 것은 아키텍처와 같은 Ajax를 사용하는 것입니다 (JavaScript 함수는 PHP 스크립트를 비동기 적으로 호출하고 결과로 무언가를 수행합니다).

<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

나중에 실행하기 위해 반향을 일으키려면 괜찮습니다.

JS를 실행하고 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"); }');

자세한 내용은 여기를 참조하십시오 : php v8js의 확장 기능은 무엇입니까?

HTML & JS를 실행하고 PHP에서 출력을 사용하려면 http://htmlunit.sourceforge.net/ 이 해결책입니다.


3

PHP는 서버에서 실행됩니다. 자바 스크립트는 클라이언트에서 실행됩니다. 따라서 PHP는 JavaScript 함수를 호출 할 수 없습니다.


11
엄밀히 말하면, 사실이 아닙니다. 서버 측 JavaScript도 있으며 이론적으로 서버에서 PHP와 JavaScript를 실행하고 서로 호출 할 수 있습니다. 실제로, 그것은 매우 드물게 시나리오 일 것입니다.
Michael Borgwardt

2

당신도 이것을 시도 할 수 있습니다 :-

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

작동하지 않으므로 -1입니다. 이 호이 스팅 기능을 별도의 두 블록으로 호출하고 정의합니다. 이것이것을
Siraj Alam

2

이렇게 해봐

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

1

직접 할 수는 없지만 Xajax 라이브러리는 원하는 것에 매우 가깝습니다. 예를 들어 설명하겠습니다. 웹 페이지에있는 버튼은 다음과 같습니다.

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

우리의 직관적 인 추측은 xajax_addCity()자바 스크립트 함수일 것입니다. 옳고 그름 Xajax가 허용하는 멋진 점은이라는 JS 함수가 xajax_addCity()없지만 PHP 가하는 모든 기능 을 수행 할 수있는 PHP 함수 addCity()입니다.

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

잠시 생각해보십시오. 우리는 사실상 자바 스크립트 코드에서 PHP 함수를 호출하고 있습니다! 지나치게 단순화 된 예는 식욕을 자극하는 것이 었습니다. 더 나은 설명은 Xajax 사이트에 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.