কিভাবে পিএইচপি থেকে একটি জাভাস্ক্রিপ্ট ফাংশন কল?


202

কিভাবে পিএইচপি থেকে একটি জাভাস্ক্রিপ্ট ফাংশন কল?

<?php

  jsfunction();
  // or
  echo(jsfunction());
  // or
  // Anything else?

নিম্নলিখিত কোডটি xyz.html থেকে এসেছে (একটি বোতাম ক্লিক করুন) এটি wait()একটি বাহ্যিক xyz.js এ কল করে । এটি wait()ওয়েট.এফপি কল করে।

function wait() 
{
  xmlhttp=GetXmlHttpObject();
  var url="wait.php"; \
  xmlhttp.onreadystatechange=statechanged; 
  xmlhttp.open("GET", url, true); 
  xmlhttp.send(null);
} 

function statechanged()
{ 
  if(xmlhttp.readyState==4) {
       document.getElementById("txt").innerHTML=xmlhttp.responseText;
  }
}

এবং অপেক্ষা. php

<?php echo "<script> loadxml(); </script>"; 

যেখানে loadxml()অন্য পিএইচপি ফাইলের কল কোড একইভাবে হয়।

loadxml()অন্যথায় সূক্ষ্ম কাজ করা হয়, কিন্তু এটি আমি এটি করতে চান বলা হচ্ছে।


1
এছাড়াও আমার জাভাস্ক্রিপ্ট এবং পিএইচপি বাহ্যিক।
জিশান রঙ

উত্তর:


362

যতদূর পিএইচপি সম্পর্কিত (বা সত্যই, সাধারণভাবে একটি ওয়েব সার্ভার), একটি HTML পৃষ্ঠা বড় স্ট্রিংয়ের চেয়ে জটিল কিছুই নয়।

পিএইচপি এর মতো ভাষার সাথে আপনি করতে পারেন এমন সমস্ত অভিনব কাজ - ডাটাবেসগুলি এবং ওয়েব পরিষেবাদি থেকে পড়া এবং যা - চূড়ান্ত শেষ লক্ষ্যটি একই একই মূল নীতি: এইচটিএমএল * এর একটি স্ট্রিং উত্পন্ন করে।

আপনার বড় এইচটিএমএল স্ট্রিং এটি কোনও ওয়েব ব্রাউজার দ্বারা লোড না হওয়া অবধি তার চেয়ে বেশি বিশেষ কিছু হয়ে ওঠে না। ব্রাউজারটি একবার পৃষ্ঠাটি লোড করে, তারপরে অন্য সমস্ত যাদু ঘটে যায় - লেআউট, বক্স মডেল স্টাফ, ডিওএম জেনারেশন এবং জাভাস্ক্রিপ্ট কার্যকরকরণ সহ আরও অনেক কিছু।

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

এটি করার বিভিন্ন উপায় রয়েছে তবে এখানে একটি দম্পতি রয়েছে।

কেবল পিএইচপি ব্যবহার:

echo '<script type="text/javascript">',
     'jsfunction();',
     '</script>'
;

পিএইচপি মোড থেকে সরাসরি আউটপুট মোডে পালাচ্ছে:

<?php
    // some php stuff
?>
<script type="text/javascript">
    jsFunction();
</script>

আপনার কোনও ফাংশনের নাম বা এর মতো কিছু ফেরত দেওয়ার দরকার নেই। প্রথমত, হাত দিয়ে এজেএক্স অনুরোধগুলি লেখা বন্ধ করুন। আপনি কেবল নিজের উপর এটিকে শক্ত করে তুলছেন। JQuery বা অন্য একটি চমৎকার ফ্রেমওয়ার্ক এখানে পান।

দ্বিতীয়ত, বুঝতে হবে যে আপনি ইতিমধ্যে জাভাস্ক্রিপ্ট কোডটি সম্পাদন করতে যাচ্ছেন একবার এজেএক্স কল থেকে প্রতিক্রিয়া পাওয়া গেছে।

আপনি jQuery এর AJAX এর সাথে কি করছেন বলে আমি মনে করি তার একটি উদাহরণ এখানে

$.get(
    'wait.php',
    {},
    function(returnedData) {
        document.getElementById("txt").innerHTML = returnedData;

        //  Ok, here's where you can call another function
        someOtherFunctionYouWantToCall();

        // But unless you really need to, you don't have to
        // We're already in the middle of a function execution
        // right here, so you might as well put your code here
    },
    'text'
);

function someOtherFunctionYouWantToCall() {
    // stuff
}

এখন, যদি আপনি পিএইচপি থেকে অ্যাজাক্স কলটিতে কোনও ফাংশন নাম প্রেরণে মারা গেছেন, আপনি এটিও করতে পারেন।

$.get(
    'wait.php',
    {},
    function(returnedData) {
        // Assumes returnedData has a javascript function name
        window[returnedData]();
    },
    'text'
);

* বা জেএসএন বা এক্সএমএল ইত্যাদি


2
বাহ্যিক জাভাস্ক্রিপ্ট ফাইলটিতে লিঙ্ক করার বিকল্পটিও রয়েছে যা কলটি নিজেই আসে ... এইভাবে আপনি জাভাস্ক্রিপ্ট কোডটি জাভাস্ক্রিপ্টের যেখানে রাখেন সেখানে রাখুন। =)
প্যাট্রিক একারস্ট্রান্ড

এটি কাজ করছে না। আমি উভয় চেষ্টা করেছিলাম। আমার প্রোগ্রাম অনুসরণ করুন .html থেকে (বোতাম ক্লিক করুন) এটি একটি বাহ্যিক .js ফাংশনে যায় যা কোনও পিএইচপি ফাইল লোড করে (xmlhttp = getXMLHttpObject () ব্যবহার করে; var url = "phpwithmysqlwait.php"; xmlhttp.onreadystate بدل = statechanged ; xmlhttp.open ("GET", url, সত্য); xmlhttp.send (নাল);) এবং আমার পিএইচপি কল <? php প্রতিধ্বনি "<script> loadxML (); </script>"; ?> যেখানে লোডএক্সএমএল অন্য পিএইচপি একইভাবে কল করে। লোডএক্সএমএল () অন্যথায় ঠিকঠাক কাজ করছে, তবে এটি যেভাবে চাইবে তা বলা হচ্ছে না। আপনি কি দয়া করে কিছু করার পরামর্শ দিতে পারেন
জিশান রঙ

9
এই লোকটি এতক্ষণে পরিষ্কার হওয়া পর্যন্ত আমি যা যা করে যাচ্ছি সবই তৈরি করেছে।
কেসি

4
@ পিটারবাইলি বেশিরভাগ লোকেরা সাধারণত এই তদন্তটি করার জন্য ব্যক্তিকে অপমান করেন এবং এটিকে রেখে যান। আপনি আসলে আমাকে সত্যিই গঠনমূলক সহায়তা দিয়েছেন। আপনাকে ধন্যবাদ :)
গিডিওন সসুন

2
@ নীলসেন্স আপনার প্রশ্নের জন্য ধন্যবাদ। আপনি এখনও এখানে মৌলিক কিছু ভুল বোঝেন। পিএইচপি এবং ক্লায়েন্ট-সাইড জাভাস্ক্রিপ্ট সরাসরি অন্যের সাথে ইন্টারঅ্যাক্ট করে না। এইচটিটিপি সবসময় মাঝখানে থাকে। এমনকি এজাক্স অনুরোধের ক্ষেত্রেও এটিই রয়েছে। আমার মূল উত্তরে years বছর আগে আমি এখন যা লিখেছিলাম তার পুনরাবৃত্তি করতে: ওয়েব অ্যাপ্লিকেশন সার্ভার হিসাবে কাজ করার সময়, সমস্ত পিএইচপি HTML এর একটি স্ট্রিং তৈরি করে যা জাভাস্ক্রিপ্ট অন্তর্ভুক্ত বা নাও থাকতে পারে।
পিটার বেইলি

86

আমি সবসময় শুধু ব্যবহার echo "<script> function(); </script>";বা অনুরূপ কিছু। আপনি পিএইচপি তে প্রযুক্তিগতভাবে ফাংশনটি কল করছেন না, তবে এটি আপনার পাওয়ার মতোই কাছাকাছি।


13
প্রতিধ্বনিত স্ক্রিপ্টের আগে জাভাস্ক্রিপ্ট ফাংশনটি রাখার বিষয়টি নিশ্চিত করুন বা এটিতে কল করা যাবে না।
নুরপ

আমরা কি echoএকটি চলক মধ্যে আউটপুট ফিরে আসতে পারি PHP?
আল্পার

52

এখন (ফেব্রুয়ারী 2012) এর জন্য একটি নতুন বৈশিষ্ট্য রয়েছে। এখানে চেক করুন

কোড নমুনা (ওয়েব থেকে নেওয়া):

<?php

$v8 = new V8Js();

/* basic.js */
$JS = <<< EOT
len = print('Hello' + ' ' + 'World!' + "\\n");
len;
EOT;

try {
  var_dump($v8->executeString($JS, 'basic.js'));
} catch (V8JsException $e) {
  var_dump($e);
}

?>

এটি মূল প্রশ্নের ব্যবহারের ক্ষেত্রে সঠিকভাবে মাপসই করতে পারে না, তবে প্রশ্নের শিরোনাম অনুসারে এই উত্তরের আরও বেশি ভোট হওয়া উচিত।
ক্রিস স্মিটজ

4
কেবল সচেতন হন যে এর জন্য আপনার পিএইচপি ইনস্টলেশনতে V8Js এক্সটেনশনটি ইনস্টল করা প্রয়োজন।
ভেলোজেট

11

আপনি পারবেন না। আপনি পিএইচপি দ্বারা আউটপুটযুক্ত এইচটিএমএল থেকে একটি জেএস ফাংশন কল করতে পারেন , তবে এটি একটি সম্পূর্ণ 'নোটার জিনিস।


ভাল আমি এর মতো একটি জেএস ফাংশনটি কল করতে সক্ষম হয়েছি: প্রতিধ্বনি "<টিডি অনক্লিক = লোডেক্সএমএল ()> <i> বিশদ জন্য ক্লিক করুন </ i> </td>"; .... তবে আমি এখনই কিছু ক্লিক করতে চাই না । আমি কেবল চাই যে আমার পিএইচপি কোনও অনুষ্ঠানের সাথে একটি জেএস ফাংশন কল করতে পারে।
জিশান রঙ

2
এই উদাহরণটি পিএইচপি নয়, এইচটিএমএলে একটি ক্লিক ইভেন্ট ব্যবহার করছে। জাভাস্ক্রিপ্ট ক্লায়েন্ট পাশ এবং পিএইচপি সার্ভার সাইড হয়। আপনি সরাসরি পিএইচপি দিয়ে জাভাস্ক্রিপ্ট কল করতে পারবেন না।
মিঃচ্রিস্টার

7

এটা সম্ভব না. পিএইচপি হ'ল সার্ভার সাইড ল্যাঙ্গুয়েজ এবং জাভাস্ক্রিপ্ট ক্লায়েন্ট সাইড এবং তারা সত্যই একে অপরের সম্পর্কে অনেক কিছু জানে না। আপনার একটি সার্ভার পার্শ্বযুক্ত জাভাস্ক্রিপ্ট ইন্টারপ্রেটারের দরকার হবে (অ্যাপ্টানাস জ্যাক্সারের মতো)। সম্ভবত আপনি যা করতে চান সেটি হচ্ছে আর্কিটেকচারের মতো অ্যাজাক্স ব্যবহার করা (জাভাস্ক্রিপ্ট ফাংশনটি পিএইচপি স্ক্রিপ্টকে অবিচ্ছিন্নভাবে কল করে এবং ফলাফলের সাথে কিছু করে)।

<td onClick= loadxml()><i>Click for Details</i></td>

function loadxml()
{
    result = loadScriptWithAjax("/script.php?event=button_clicked");
    alert(result);
}

// script.php
<?php
    if($_GET['event'] == 'button_clicked')
        echo "\"You clicked a button\"";
?>

7

আপনি যদি পরবর্তী সম্পাদনের জন্য এটি প্রতিধ্বন করতে চান তবে ঠিক আছে

আপনি যদি জেএস কার্যকর করতে চান এবং পিএইচপি-র ফলাফলগুলি ভি 8 জেএস ব্যবহার করতে চান

V8Js::registerExtension('say_hi', 'print("hey from extension! "); var said_hi=true;', array(), true);
$v8 = new V8Js();
$v8->executeString('print("hello from regular code!")', 'test.php');
$v8->executeString('if (said_hi) { print(" extension already said hi"); }');

আপনি আরও রেফারেন্সের জন্য এখানে উল্লেখ করতে পারেন: পিএইচপি ভি 8 জজে এক্সটেনশনগুলি কী?

আপনি যদি এইচটিএমএল এবং জেএস কার্যকর করতে চান এবং পিএইচপি http://htmlunit.sourceforge.net/ এ আউটপুট ব্যবহার করতে চান তবে এটি আপনার সমাধান


3

পিএইচপি সার্ভারে চলে। জাভাস্ক্রিপ্ট ক্লায়েন্ট চালায়। সুতরাং পিএইচপি কোনও জাভাস্ক্রিপ্ট ফাংশন কল করতে পারে না।


11
কড়া কথা বলতে গেলে, এটি সত্য নয়। সার্ভার-পাশের জাভাস্ক্রিপ্টও রয়েছে এবং আপনার কাছে তাত্ত্বিকভাবে কোনও সার্ভারে পিএইচপি এবং জাভাস্ক্রিপ্ট চলতে এবং একে অপরকে কল করতে পারে could অনুশীলনে, এটি বা অবশ্যই খুব সম্ভাবনাময় একটি দৃশ্য।
মাইকেল বর্গওয়ার্ট

2

আপনি এটি ব্যবহার করে দেখতে পারেন: -

    public function PHPFunction()
    {
            echo '<script type="text/javascript">
                 test();
            </script>'; 
    }
    <script type="text/javascript">
    public function test()
    {
        alert('In test Function');
    }
    </script>

-1 এটি কাজ করবে না বলে। আপনি দুটি পৃথক ব্লকে এই উত্তোলন কার্যগুলি কল করে এবং সংজ্ঞায়িত করছেন। এটি এবং এটি
সিরাজ আলম

2

এই মত চেষ্টা করুন

<?php
 if(your condition){
     echo "<script> window.onload = function() {
     yourJavascriptFunction(param1, param2);
 }; </script>";
?>

1

আপনি সরাসরি এটি করতে সক্ষম নাও হতে পারেন তবে জাজাক্স লাইব্রেরি আপনি যা চান তার খুব কাছে। আমি একটি উদাহরণ দিয়ে প্রদর্শিত হবে। ওয়েবপৃষ্ঠায় একটি বোতাম এখানে রয়েছে:

<button onclick="xajax_addCity();">Add New City</button> 

আমাদের স্বজ্ঞাত অনুমানটি হবে xajax_addCity()এটি একটি জাভাস্ক্রিপ্ট ফাংশন, তাই না? ঠিক আছে, সঠিক এবং ভুল। জাজাক্স দুর্দান্ত জিনিসটি মঞ্জুরি দেয় তা হল আমাদের কোনও জেএস ফাংশন নেই xajax_addCity(), তবে আমাদের যা আছে তা হল একটি পিএইচপি ফাংশন addCity()যা পিএইচপি যা করতে পারে তা করতে পারে!

<?php function addCity() { echo "Wow!"; } ?>

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

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