[php] JavaScript에서 PHP 함수 호출

JS 함수를 통해 PHP 함수를 실행할 수있는 방법이 있습니까?

이 같은:

<script type="text/javascript">
function test(){
document.getElementById("php_code").innerHTML="<?php
query("hello");       ?>";
}
</script>

<a href="#" style="display:block; color:#000033; font-family:Tahoma; font-size:12px;"
onclick="test(); return false;"> test </a>
<span id="php_code"> </span>

기본적으로 PHP 함수를 query("hello")호출하는 “Test”라는 href를 클릭 할 때 php 함수를 실행하고 싶습니다 .



답변

이것은 무엇을, 본질에서, AJAX가 있다 위해 . 페이지가로드되고 요소에 이벤트를 추가합니다. 사용자가 무언가를 클릭하여 이벤트를 트리거하면 Javascript는 XMLHttpRequest 객체 를 사용하여 서버에 요청을 보냅니다.

서버가 (아마도 출력으로) 응답 한 후, 다른 자바 스크립트 함수 / 이벤트는 다른 HTML과 마찬가지로 페이지에 단순히 붙이는 것을 포함하여 해당 출력으로 작업 할 수있는 장소를 제공합니다.

일반 자바 스크립트를 사용하여 “수작업으로”수행하거나 jQuery를 사용할 수 있습니다. 프로젝트의 크기와 특정 상황에 따라 일반 자바 스크립트를 사용하는 것이 더 간단 할 수 있습니다.

일반 자바 스크립트

이 매우 기본적인 예에서는 myAjax.php사용자가 링크를 클릭 할 때로 요청을 보냅니다 . 서버는 일부 콘텐츠,이 경우 “hello world!”를 생성합니다. 우리는 id로 HTML 요소에 넣을 것 output입니다.

자바 스크립트

// handles the click event for link 1, sends the query
function getOutput() {
  getRequest(
      'myAjax.php', // URL for the PHP file
       drawOutput,  // handle successful request
       drawError    // handle error
  );
  return false;
}
// handles drawing an error message
function drawError() {
    var container = document.getElementById('output');
    container.innerHTML = 'Bummer: there was an error!';
}
// handles the response, adds the html
function drawOutput(responseText) {
    var container = document.getElementById('output');
    container.innerHTML = responseText;
}
// helper function for cross-browser request object
function getRequest(url, success, error) {
    var req = false;
    try{
        // most browsers
        req = new XMLHttpRequest();
    } catch (e){
        // IE
        try{
            req = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
            // try an older version
            try{
                req = new ActiveXObject("Microsoft.XMLHTTP");
            } catch(e) {
                return false;
            }
        }
    }
    if (!req) return false;
    if (typeof success != 'function') success = function () {};
    if (typeof error!= 'function') error = function () {};
    req.onreadystatechange = function(){
        if(req.readyState == 4) {
            return req.status === 200 ?
                success(req.responseText) : error(req.status);
        }
    }
    req.open("GET", url, true);
    req.send(null);
    return req;
}

HTML

<a href="#" onclick="return getOutput();"> test </a>
<div id="output">waiting for action</div>

PHP

// file myAjax.php
<?php
  echo 'hello world!';
?>

시도해보세요 : http://jsfiddle.net/GRMule/m8CTk/


자바 스크립트 라이브러리 사용 (jQuery 외)

틀림없이 많은 자바 스크립트 코드입니다. 물론 블록을 조이거나 더 간결한 논리 연산자를 사용하여 단축 할 수 있지만 여전히 많은 일이 진행되고 있습니다. 프로젝트에서 이러한 유형의 작업을 많이 할 계획이라면 자바 스크립트 라이브러리를 사용하는 것이 더 나을 수 있습니다.

위와 동일한 HTML 및 PHP를 사용하여 전체 스크립트입니다 (페이지에 jQuery 포함). jQuery의 일반적인 스타일과 일관성을 유지하기 위해 코드를 약간 강화했지만 아이디어를 얻었습니다.

// handles the click event, sends the query
function getOutput() {
   $.ajax({
      url:'myAjax.php',
      complete: function (response) {
          $('#output').html(response.responseText);
      },
      error: function () {
          $('#output').html('Bummer: there was an error!');
      }
  });
  return false;
}

사용해보세요 : http://jsfiddle.net/GRMule/WQXXT/

아직 jQuery를 서두르지 마십시오. 라이브러리를 추가하는 것은 마치 작성한 것처럼 확실히 프로젝트에 수백 또는 수천 줄의 코드를 추가하는 것입니다. jQuery 라이브러리 파일 내에서 첫 번째 예제와 유사한 코드와 훨씬 더 많은 . 그것은 좋은 것일 수도 있고 아닐 수도 있습니다. 프로젝트의 현재 크기와 향후 확장 가능성 및 대상 환경 또는 플랫폼을 계획하고 고려합니다.

이것이 당신이해야 할 전부라면, 평범한 자바 스크립트를 한 번 작성하면 완료됩니다.

선적 서류 비치


답변

PHP는 서버에서 평가됩니다. javascript는 클라이언트 / 브라우저에서 평가되므로 javascript에서 직접 PHP 함수를 호출 할 수 없습니다 . 그러나 AJAX를 사용하여 PHP 기능을 활성화 할 서버에 HTTP 요청을 발행 할 수 있습니다.


답변

JS에서 PHP를 실행하는 유일한 방법은 AJAX입니다. 서버에 데이터를 보낼 수 있습니다 (예 : GET /ajax.php?do=someFunction). ajax.php에서 다음과 같이 작성할 수 있습니다.

function someFunction() {
    echo 'Answer';
}

if ($_GET['do'] === "someFunction") {
    someFunction();
}

그런 다음 JS로 대답을 잡으십시오 (AJAX 요청을 만들기 위해 jQuery를 사용하고 있습니다)

아마도 당신은 어떤 형식의 대답이 필요할 것입니다. JSON 또는 XML을 참조하지만 JSON은 JavaScript와 함께 사용하기 쉽습니다. PHP에서는 function json_encode ($ array); 인수로 배열을 가져옵니다.


답변

최근에 다양한 방법으로 PHP 함수 호출을 할 수있는 jQuery 플러그인을 게시했습니다 : https://github.com/Xaxis/jquery.php

간단한 사용 예 :

// Both .end() and .data() return data to variables
var strLenA = P.strlen('some string').end();
var strLenB = P.strlen('another string').end();
var totalStrLen = strLenA + strLenB;
console.log( totalStrLen ); // 25

// .data Returns data in an array
var data1 = P.crypt("Some Crypt String").data();
console.log( data1 ); // ["$1$Tk1b01rk$shTKSqDslatUSRV3WdlnI/"]


답변