복붙노트

jquery $ .ajax를 사용하여 PHP 함수 호출하기

PHP

jquery $ .ajax를 사용하여 PHP 함수 호출하기

이것은 간단한 대답 일지 모르지만 jQuery의 $ .ajax를 사용하여 PHP 스크립트를 호출합니다. 내가하고 싶은 것은 기본적으로 PHP 스크립트를 함수 안에 넣고 자바 스크립트에서 PHP 함수를 호출하는 것입니다.

<?php 
if(isset($_POST['something'] {
    //do something
}
?>

이에

<?php
function test() {
    if(isset($_POST['something'] {
         //do something. 
    }
}
?>

어떻게 자바 스크립트에서 그 함수를 호출할까요? 바로 지금 PHP 파일을 나열한 $ .ajax를 사용하고 있습니다.

해결법

  1. ==============================

    1.

    $ .ajax를 사용하여 서버 컨텍스트 (또는 URL 등)를 호출하여 특정 '동작'을 호출합니다. 당신이 원하는 것은 다음과 같습니다.

    $.ajax({ url: '/my/site',
             data: {action: 'test'},
             type: 'post',
             success: function(output) {
                          alert(output);
                      }
    });
    

    서버 측에서 조치 POST 매개 변수를 읽고 해당 값이 호출 할 메소드를 가리켜 야합니다 (예 :

    if(isset($_POST['action']) && !empty($_POST['action'])) {
        $action = $_POST['action'];
        switch($action) {
            case 'test' : test();break;
            case 'blah' : blah();break;
            // ...etc...
        }
    }
    

    저는 이것이 커맨드 패턴의 단순한 구체화라고 믿습니다.

  2. ==============================

    2.

    나는 핵심 PHP 함수 또는 사용자 정의 PHP 함수를 플러그인의 메소드로 호출 할 수있는 jQuery 플러그인을 개발했다. jquery.php

    jquery와 jquery.php를 문서의 머리 부분에 넣고 request_handler.php를 서버에 넣은 후에는 아래에 설명 된 방법으로 플러그인을 사용하기 시작할 것입니다.

    사용의 용이성을 위해 함수를 간단한 방식으로 참조하십시오.

        var P = $.fn.php;
    

    그런 다음 플러그인을 초기화하십시오.

    P('init', 
    {
        // The path to our function request handler is absolutely required
        'path': 'http://www.YourDomain.com/jqueryphp/request_handler.php',
    
        // Synchronous requests are required for method chaining functionality
        'async': false,
    
        // List any user defined functions in the manner prescribed here
                // There must be user defined functions with these same names in your PHP
        'userFunctions': {
    
            languageFunctions: 'someFunc1 someFunc2'
        }
    });             
    

    이제 몇 가지 사용 시나리오가 있습니다.

    // Suspend callback mode so we don't work with the DOM
    P.callback(false);
    
    // 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/"]
    

    PHP 함수 체이닝 입증하기 :

    var data1 = P.strtoupper("u,p,p,e,r,c,a,s,e").strstr([], "C,A,S,E").explode(",", [], 2).data();
    var data2 = P.strtoupper("u,p,p,e,r,c,a,s,e").strstr([], "C,A,S,E").explode(",", [], 2).end();
    console.log( data1, data2 );
    

    PHP 의사 코드의 JSON 블록을 보내는 방법을 보여줍니다.

    var data1 = 
            P.block({
        $str: "Let's use PHP's file_get_contents()!",
        $opts: 
        [
            {
                http: {
                    method: "GET",
                    header: "Accept-language: en\r\n" +
                            "Cookie: foo=bar\r\n"
                }
            }
        ],
        $context: 
        {
            stream_context_create: ['$opts']
        },
        $contents: 
        {
            file_get_contents: ['http://www.github.com/', false, '$context']
        },
        $html: 
        {
            htmlentities: ['$contents']
        }
    }).data();
        console.log( data1 );
    

    백엔드 구성은 화이트리스트를 제공하므로 호출 할 수있는 기능을 제한 할 수 있습니다. 플러그인으로 설명 된 PHP로 작업하기위한 몇 가지 패턴이 있습니다.

  3. ==============================

    3.

    필자는 파일을 직접 호출하는 일반적인 접근법을 고수 하겠지만 실제로 함수를 호출하려면 JSON-RPC (JSON 원격 프로 시저 호출)를 살펴보십시오.

    기본적으로 특정 형식의 JSON 문자열을 서버에 보냅니다.

    { "method": "echo", "params": ["Hello JSON-RPC"], "id": 1}
    

    여기에는 호출 할 함수와 해당 함수의 매개 변수가 포함됩니다.

    물론 서버는 이러한 요청을 처리하는 방법을 알고 있어야합니다. 다음은 JSON-RPC 용 jQuery 플러그인입니다 (예 : Zend JSON Server는 PHP의 서버 구현체입니다.

    이것은 소규모 프로젝트 나 기능이 적을 때 과도 할 수 있습니다. 가장 쉬운 방법은 카림의 대답 일 것입니다. 반면 JSON-RPC는 표준입니다.

  4. ==============================

    4.

    Javascript로 PHP 함수를 호출 할 수 없습니다. 페이지를로드 할 때 임의의 PHP 함수를 호출 할 수없는 것과 같은 방식입니다 (보안 의미를 생각해보십시오).

    어떤 이유로 든 함수에 코드를 래핑해야하는 경우 함수 정의에 함수 호출을 넣지 않는 것이 좋습니다. 예를 들면 다음과 같습니다.

    function test() {
        // function code
    }
    
    test();
    

    또는 PHP 포함 사용 :

    include 'functions.php'; // functions.php has the test function
    test();
    
  5. ==============================

    5.

    자동으로 그렇게하는 라이브러리를 사용할 수도 있습니다. 지난 2 년간이 라이브러리를 개선했습니다. http://phery-php-ajax.net

    Phery::instance()->set(array(
       'phpfunction' => function($data){
          /* Do your thing */
          return PheryResponse::factory(); // do your dom manipulation, return JSON, etc
       }
    ))->process();
    

    자바 스크립트는

    phery.remote('phpfunction');
    

    모든 동적 자바 스크립트 부분을 체인 가능한 인터페이스와 같은 쿼리 작성기로 서버에 전달할 수 있으며 모든 유형의 데이터를 PHP로 다시 전달할 수 있습니다. 예를 들어, 자바 스크립트 측면에서 너무 많은 공간을 차지하는 일부 함수는 이것을 사용하여 서버에서 호출 할 수 있습니다 (이 예에서는 mcrypt, 자바 스크립트에서는 거의 수행 할 수 없음).

    function mcrypt(variable, content, key){
      phery.remote('mcrypt_encrypt', {'var': variable, 'content': content, 'key':key || false});
    }
    
    //would use it like (you may keep the key on the server, safer, unless it's encrypted for the user)
    window.variable = '';
    mcrypt('variable', 'This must be encoded and put inside variable', 'my key');
    

    및 서버

    Phery::instance()->set(array(
      'mcrypt_encrypt' => function($data){
         $r = new PheryResponse;
    
         $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
         $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
         $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $data['key'] ? : 'my key', $data['content'], MCRYPT_MODE_ECB, $iv);
         return $r->set_var($data['variable'], $encrypted);
         // or call a callback with the data, $r->call($data['callback'], $encrypted);
      }
    ))->process();
    

    이제 변수는 암호화 된 데이터를 갖게됩니다.

  6. ==============================

    6.

    jQuery에서 ajax 호출의 POST 요청을 받아들이는 시스템에서 노출과 종단점 (URL)을 가져야한다.

    그런 다음 PHP에서 url을 처리 할 때 함수를 호출하고 결과를 적절한 형식 (JSON 또는 XML)으로 반환합니다.

  7. from https://stackoverflow.com/questions/2269307/using-jquery-ajax-to-call-a-php-function by cc-by-sa and MIT lisence