Call php function from JavaScript

后端 未结 4 594
一个人的身影
一个人的身影 2020-11-21 06:38

Is there a way I can run a php function through a JS function?

something like this:



        
相关标签:
4条回答
  • 2020-11-21 06:49

    This is, in essence, what AJAX is for. Your page loads, and you add an event to an element. When the user causes the event to be triggered, say by clicking something, your Javascript uses the XMLHttpRequest object to send a request to a server.

    After the server responds (presumably with output), another Javascript function/event gives you a place to work with that output, including simply sticking it into the page like any other piece of HTML.

    You can do it "by hand" with plain Javascript , or you can use jQuery. Depending on the size of your project and particular situation, it may be more simple to just use plain Javascript .

    Plain Javascript

    In this very basic example, we send a request to myAjax.php when the user clicks a link. The server will generate some content, in this case "hello world!". We will put into the HTML element with the id output.

    The javascript

    // 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;
    }
    

    The HTML

    <a href="#" onclick="return getOutput();"> test </a>
    <div id="output">waiting for action</div>
    

    The PHP

    // file myAjax.php
    <?php
      echo 'hello world!';
    ?>
    

    Try it out: http://jsfiddle.net/GRMule/m8CTk/


    With a javascript library (jQuery et al)

    Arguably, that is a lot of Javascript code. You can shorten that up by tightening the blocks or using more terse logic operators, of course, but there's still a lot going on there. If you plan on doing a lot of this type of thing on your project, you might be better off with a javascript library.

    Using the same HTML and PHP from above, this is your entire script (with jQuery included on the page). I've tightened up the code a little to be more consistent with jQuery's general style, but you get the idea:

    // 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;
    }
    

    Try it out: http://jsfiddle.net/GRMule/WQXXT/

    Don't rush out for jQuery just yet: adding any library is still adding hundreds or thousands of lines of code to your project just as surely as if you had written them. Inside the jQuery library file, you'll find similar code to that in the first example, plus a whole lot more. That may be a good thing, it may not. Plan, and consider your project's current size and future possibility for expansion and the target environment or platform.

    If this is all you need to do, write the plain javascript once and you're done.

    Documentation

    • AJAX on MDN - https://developer.mozilla.org/en/ajax
    • XMLHttpRequest on MDN - https://developer.mozilla.org/en/XMLHttpRequest
    • XMLHttpRequest on MSDN - http://msdn.microsoft.com/en-us/library/ie/ms535874%28v=vs.85%29.aspx
    • jQuery - http://jquery.com/download/
    • jQuery.ajax - http://api.jquery.com/jQuery.ajax/
    0 讨论(0)
  • 2020-11-21 06:53

    The only way to execute PHP from JS is AJAX. You can send data to server (for eg, GET /ajax.php?do=someFunction) then in ajax.php you write:

    function someFunction() {
        echo 'Answer';
    }
    
    if ($_GET['do'] === "someFunction") {
        someFunction();
    }
    

    and then, catch the answer with JS (i'm using jQuery for making AJAX requests)

    Probably you'll need some format of answer. See JSON or XML, but JSON is easy to use with JavaScript. In PHP you can use function json_encode($array); which gets array as argument.

    0 讨论(0)
  • 2020-11-21 06:57

    I recently published a jQuery plugin which allows you to make PHP function calls in various ways: https://github.com/Xaxis/jquery.php

    Simple example usage:

    // 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/"]
    
    0 讨论(0)
  • 2020-11-21 06:59

    PHP is evaluated at the server; javascript is evaluated at the client/browser, thus you can't call a PHP function from javascript directly. But you can issue an HTTP request to the server that will activate a PHP function, with AJAX.

    0 讨论(0)
提交回复
热议问题