JavaScript에서 PHP 함수 호출


80

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 함수를 실행하고 싶습니다 .


4
단순히 아약스를 사용하여 필요한 메소드를 호출하는 것 외에는이를 수행 할 방법이 없습니다.
TheVillageIdiot

9
아시다시피 PHP는 서버에서 실행되지만 JS는 클라이언트에서 실행됩니까? 이것은 이런 식으로 작동 할 수 없습니다 .
KingCrunch

잠깐, <?php query("hello"); ?>페이지가로드 될 때 PHP에 의해 렌더링 되지 않습니까? 그렇다면 query("hello")js 함수에서 출력을 얻을 수 있습니다 .
TheVillageIdiot 2011 년

위의 코드가 잘못되었다는 것을 알고 있지만 원하는 것을 보여주기 위해 사용한 것뿐입니다
Jason Russell

답변:


144

이것은 무엇을, 본질에서, 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 라이브러리 파일 내에서 첫 번째 예제와 유사한 코드와 훨씬 더 많은 . 그것은 좋은 것일 수도 있고 아닐 수도 있습니다. 프로젝트의 현재 크기와 향후 확장 가능성 및 대상 환경 또는 플랫폼을 계획하고 고려합니다.

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

선적 서류 비치


3
-1, 절반의 대답, OP는 자바 스크립트에서 PHP 함수를 호출하는 방법을 물었습니다. Pou는 PHP PAGE를 호출하는 방법 만 보여주었습니다. ajax 호출에 포스트 변수를 추가하고 해당 포스트 변수를 확인한 다음 해당 포스트 변수가있는 경우 해당 PHP 함수를 호출해야합니다.
MH

6
@Hanoncs 서버 측 코드의 거의 무한한 배열로 인해 OP가 사용하는 아키텍처를 추측하는 것이 건설적이거나 불가능합니다. OP가 POST (또는 GET)를 참조하지 않거나 값을 전달해야하기 때문에 즉각적인 문제 설명과도 관련이 없습니다. 나는 귀하의 반대표가 잘못되었다고 생각하며 OP에 포함되지 않은 주제에 대한 임의의 추측을 내 대답에 추가하지 않을 것입니다. 그래도 피드백 주셔서 감사합니다.
Chris Baker

코드를 사용할 때 함수 선언 앞에 "var"를 사용하기 때문에 오류가 발생합니다. "var"를 제거하면 작동합니다.
Jayden Lawson

16

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


3
@Hanoncs : 이것은 이다 대답. OP는 JS를 통해 PHP 기능을 실행할 수 있는지 물었습니다. 대답은- 당신은 할 수 없습니다 . 다음 예 - - 그는 당신이 PHP 함수를 실행하는 PHP 스크립트를 활성화하기 위해 웹 서버를 만들 것입니다 HTTP 요청을 발행 할 수 있는지 여부를 질문했을 경우 가능합니다. 그러나 그는 이것을 요구하지 않았습니다. 저는 관련없는 데이터를 쓰지 않습니다.
Dor

8
하하 어서, 그게 OP가 그의 질문에서 의미하는 바라는 것을 알고 있습니다. 그가 그것을 어떻게하는지 이미 알고있는 것처럼 정확하게 설명하는 방법을 안다면.
MH

11

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); 인수로 배열을 가져옵니다.


3

최근에 다양한 방법으로 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/"]

4
사람들이 JavaScript를 통해 PHP 함수를 호출하는 것과 관련하여 명백한 편견을 제외하고는 내 대답이 왜 그랬는지만큼 투표가 거부 된 이유를 정확히 설명해주세요. 나는 해결책으로 당면한 질문에 합법적으로 대답하고있는 것입니까?
Xaxis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.