একটি পিএইচপি ফাংশন কল করতে jquery aj .axax ব্যবহার করে


118

এটি একটি সহজ উত্তর হতে পারে তবে আমি পিএইচপি স্ক্রিপ্ট কল করতে jQuery এর aj .জ্যাক্স ব্যবহার করছি। আমি যা করতে চাই তা মূলত সেই পিএইচপি স্ক্রিপ্টটিকে কোনও ফাংশনের ভিতরে রেখে জাভাস্ক্রিপ্ট থেকে পিএইচপি ফাংশনটি কল করা হয়।

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

এই

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

আমি কীভাবে জাভাস্ক্রিপ্টে সেই ফাংশনটিকে কল করব? এই মুহূর্তে আমি তালিকাভুক্ত পিএইচপি ফাইলের সাথে just .জ্যাক্স ব্যবহার করছি।


6
খোলার জন্য পিএইচপি জাভাস্ক্রিপ্ট-উত্পন্ন পিএইচপি কোডটি পাস করা, বা অন্য উপায়ে এটি করা খুব খারাপ ধারণা।
টাইলার কার্টার

কেন আপনি খারাপ ব্যাখ্যা করতে পারেন?
ক্যাটফিশ

3
কারণ যে কেউ আপনার কোডের জায়গায় যে কোনও কোড রাখতে পারে এবং তারা আপনার সার্ভারে খারাপ কাজ করতে পারে।
টাইলার কার্টার

9
@ চাচ্চা ১০২: আপনি বা আমি প্রশ্নটি বুঝতে পারছি না। আমার বোঝার মধ্যে তিনি একটি রিমোট পদ্ধতি কল করতে চান।
ফেলিক্স ক্লিং

একটি রিমোট পদ্ধতি কল গ্রহণযোগ্য হতে পারে যদি আপনার যদি এমন কোনও শ্বেতলিস্ট থাকে যা আপনার অনুমতিপ্রাপ্ত ফাংশন বা "পদ্ধতি" ব্যতীত সকলের অ্যাক্সেসকে সীমাবদ্ধ করে। এটি কার্যকর করা কঠিন হবে না।
এক্সএক্সিস

উত্তর:


228

$.ajaxকোনও নির্দিষ্ট 'ক্রিয়া' প্রেরণের জন্য কোনও সার্ভারের প্রসঙ্গে (বা URL, বা যাই হোক না কেন) কল করতে ব্যবহার করুন । আপনি যা চান তা হ'ল কিছু:

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

সার্ভারের দিকে, actionপোষ্ট প্যারামিটারটি পড়তে হবে এবং অনুরূপ মানটি অনুরোধ করার পদ্ধতিতে নির্দেশ করা উচিত, যেমন:

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

আমি বিশ্বাস করি এটি কমান্ড প্যাটার্নের একটি সহজ অবতার ।


9
Gotcha। সুতরাং আপনি পিএসপি-তে কল করতে কোন ফাংশন জেএসের সাথে সরাসরি চয়ন করতে পারবেন না, আপনি কেবল পোস্টের মানটি ধরে পিএইচপি ব্যবহার করতে পারেন এবং কোনও ফাংশনকে সেভাবে কল করতে পারেন। ধন্যবাদ
ক্যাটফিশ

আপনি যদি কোনও ফ্রেমওয়ার্ক ব্যবহার করেন তবে এটি সহজ। কোহানার সাথে উদাহরণস্বরূপ আপনি কন্ট্রোলার / অ্যাকশন এজ্যাক্স (ফাংশন () can url: 'কন্ট্রোলার / অ্যাকশন.এফপি',}) বলতে পারেন;
ডেথকোডার

1
@ মিঃমিসিজ আপনি যদি আমাদের সাথে সেই আধুনিক সেরা অনুশীলনগুলি ভাগ করেন তবে তা দুর্দান্ত হবে।
ফ্রান্সিসকো রোমেরো

এইচটিটিপি ফেচ এপিআই ব্যবহার করা জেএস সম্মুখভাগের পাশাপাশি প্রতিশ্রুতি ব্যবহারের জন্য হতে পারে। পিএইচপি স্যানিটাইজাইজিং এবং ফিল্টারিং ইনপুটগুলির জন্য, সম্ভবত মিডলওয়্যার ব্যবহার করে যাতে এটি একাধিক প্রান্তে প্রয়োগ করা যায়। আমি মনে করি গুরুত্বপূর্ণ আপনি যদি আমার মতামত ~ 2 বছর অপেক্ষা না করতে চান তবে একটি দুর্দান্ত বিকল্প হতে পারে।
মিঃমিজিস

12

আমি একটি jQuery প্লাগইন তৈরি করেছি যা আপনাকে যে কোনও মূল পিএইচপি ফাংশন বা এমনকি ব্যবহারকারী সংজ্ঞায়িত পিএইচপি ফাংশনগুলিকে প্লাগইনের পদ্ধতি হিসাবে কল করতে দেয়: jquery.php

আমাদের ডকুমেন্টের শিরোনামে jquery এবং jquery.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/"]

পিএইচপি ফাংশন শৃঙ্খলা প্রদর্শন করে:

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

পিএইচপি সিউডো-কোডের একটি জেএসএন ব্লক প্রেরণে প্রদর্শিত হচ্ছে:

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

ব্যাকএন্ড কনফিগারেশন একটি শ্বেত তালিকা সরবরাহ করে যাতে কোন ফাংশন বলা যেতে পারে তা সীমাবদ্ধ করতে পারেন। প্লাগইন দ্বারা বর্ণিত পিএইচপি দিয়ে কাজ করার জন্য আরও কয়েকটি নিদর্শন রয়েছে।


5

আমি সরাসরি ফাইলটি কল করতে স্বাভাবিক পদ্ধতির সাথে লেগে থাকব, তবে আপনি যদি সত্যিই কোনও ফাংশন কল করতে চান তবে জেএসএন-আরপিসি (জেএসওন রিমোট প্রসিডিয়ার কল) দেখুন।

আপনি সার্ভারে মূলত একটি নির্দিষ্ট ফর্ম্যাটে একটি JSON স্ট্রিং প্রেরণ করুন, যেমন

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

যার মধ্যে কল করতে ফাংশন এবং সেই ফাংশনের পরামিতি অন্তর্ভুক্ত।

অবশ্যই সার্ভারকে এই জাতীয় অনুরোধগুলি কীভাবে পরিচালনা করতে হয় তা জানতে হবে।
এখানে JSON-RPC এর জন্য jQuery প্লাগইন রয়েছে এবং যেমন পিএইচপি-তে সার্ভার বাস্তবায়ন হিসাবে জেন্ড JSON সার্ভার


এটি কোনও ছোট প্রকল্প বা কম ক্রিয়াকলাপের জন্য ওভারকিল হতে পারে। সবচেয়ে সহজ উপায় করিমের উত্তর হবে । অন্যদিকে, জেএসওএন-আরপিসি একটি মান।


4

আপনি জাভাস্ক্রিপ্টের সাথে পিএইচপি ফাংশনটি কল করতে পারবেন না, আপনি কোনও পৃষ্ঠা লোড করার সময় একইভাবে আপনি নির্বিচার পিএইচপি ফাংশনগুলি কল করতে পারবেন না (কেবলমাত্র সুরক্ষা সম্পর্কিত প্রভাবগুলির কথা চিন্তা করুন)।

কোনও কারণেই যদি আপনার কোডটি কোনও ফাংশনে মোড়ানোর দরকার হয় তবে আপনি কেন ফাংশন সংজ্ঞা অনুসারে কোনও ফাংশন কল রাখেন না, যেমন:

function test() {
    // function code
}

test();

বা, একটি পিএইচপি ব্যবহার অন্তর্ভুক্ত:

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

3

আপনার সিস্টেমে আপনাকে এক্সপোজ এবং এন্ডপয়েন্ট (ইউআরএল) করতে হবে যা jQuery এজ্যাক্স কল থেকে পোষ্ট অনুরোধ গ্রহণ করবে।

তারপরে, পিএইচপি থেকে সেই ইউআরএল প্রক্রিয়া করার সময়, আপনি আপনার ফাংশনটি কল করে উপযুক্ত ফর্ম্যাটে ফলাফলটি ফিরিয়ে আনবেন (সম্ভবত জেএসএন, অথবা আপনি যদি চান তবে এক্সএমএল)।


3

আপনি আমার লাইব্রেরিটি ব্যবহার করতে পারেন যা এটি স্বয়ংক্রিয়ভাবে হয়, আমি গত 2 বছর ধরে এটি উন্নত করছি pher

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

জাভাস্ক্রিপ্ট হিসাবে সহজ হবে

phery.remote('phpfunction');

আপনি চেইনিয়েবল ইন্টারফেসের মতো কোনও ক্যোয়ারী নির্মাতাকে দিয়ে সমস্ত গতিশীল জাভাস্ক্রিপ্ট অংশটি সার্ভারে পাস করতে পারেন এবং আপনি কোনও প্রকারের ডেটা পিএইচপি-তে ফেরত দিতে পারেন। উদাহরণস্বরূপ, কিছু ফাংশন যা জাভাস্ক্রিপ্টের পক্ষে খুব বেশি জায়গা নেবে, এটি ব্যবহার করে সার্ভারে কল করা যেতে পারে (উদাহরণস্বরূপ, মাইক্রিপ্ট, জাভাস্ক্রিপ্টে সম্পাদন করা প্রায় অসম্ভব হবে):

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উইন্ডোতে এনক্রিপ্ট করা ডেটা থাকবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.