programing

jquery $.ajax를 사용하여 PHP 함수를 호출합니다.

kingscode 2022. 9. 8. 23:03
반응형

jquery $.ajax를 사용하여 PHP 함수를 호출합니다.

간단한 답변이지만, 저는 jQuery의 $.ajax를 사용하여 PHP 스크립트를 호출합니다.제가 하고 싶은 것은 기본적으로 그 PHP 스크립트를 함수 안에 넣고 javascript에서 PHP 함수를 호출하는 것입니다.

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

여기에

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

javascript에서는 그 기능을 뭐라고 합니까?지금은 PHP 파일에 $.ajax를 사용하고 있습니다.

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

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

서버 측에서는actionPOST 파라미터를 읽고 대응하는 값이 호출할 메서드를 가리켜야 합니다.예를 들어 다음과 같습니다.

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

나는 그것이 명령어 패턴의 단순한 화신이라고 믿는다.

저는 jQuery 플러그인을 개발했습니다.이 플러그인의 메서드로서 코어 PHP 함수 또는 사용자 정의 PHP 함수를 호출할 수 있습니다.jqueryphp

문서 선두에 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를 사용하기 위한 몇 가지 다른 패턴도 플러그인으로 설명되어 있습니다.

파일을 직접 호출하려면 일반적인 방법을 사용하지만 함수를 호출하려면 JSON-RPC(JSON Remote Procedure Call)를 참조하십시오.

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

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

여기에는 호출하는 함수와 해당 함수의 파라미터가 포함됩니다.

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


이는 소규모 프로젝트나 그 이하의 기능에는 과잉일 수 있습니다.가장 쉬운 방법은 카림의 대답일 것이다.한편, JSON-RPC는 표준입니다.

페이지를 로드할 때 임의의 PHP 함수를 호출할 수 없는 것과 마찬가지로 Javascript를 사용하여 PHP 함수를 호출할 수 없습니다(보안상의 영향만 생각해 보십시오).

어떤 이유로든 코드를 함수로 묶어야 할 경우 함수 정의 아래에 함수 호출을 넣는 것이 좋습니다. 예를 들어 다음과 같습니다.

function test() {
    // function code
}

test();

또는 PHP include를 사용합니다.

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

jQuery의 ajax 호출로부터의 POST 요구를 받아들이는 시스템에서 노출 및 엔드포인트(URL)가 필요합니다.

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

제 라이브러리를 사용하면 자동으로 사용할 수 있습니다.저는 지난 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();

javascript는 다음과 같이 간단합니다.

phery.remote('phpfunction');

체인 가능한 인터페이스와 같은 쿼리 빌더를 사용하여 동적 Javascript 부분을 모두 서버에 전달할 수 있으며, 어떤 유형의 데이터도 PHP에 다시 전달할 수 있습니다.예를 들어, javascript 측에서 너무 많은 공간을 차지하는 일부 함수는 이를 사용하여 서버에서 호출할 수 있습니다(이 예에서는 mcrypt로, javascript에서는 거의 실행할 수 없습니다).

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();

, 이제 ㅇㅇ, ㅇㅇ.variable이치노

언급URL : https://stackoverflow.com/questions/2269307/using-jquery-ajax-to-call-a-php-function

반응형