2011-08-23 66 views
68

Có cách nào để tôi có thể chạy hàm php thông qua hàm JS không?Gọi hàm php từ JavaScript

một cái gì đó như thế này:

<script type="text/javascript"> 
function test(){ 
document.getElementById("php_code").innerHTML="<?php 
query("hello");  ?>";  
} 
</script> 

<a href="#" style="display:block; color:#000033; font-family:Tahoma; font-size:12px;"  
onclick="test(); return false;"> test </a> 
<span id="php_code"> </span> 

tôi về cơ bản muốn chạy php function query("hello"), khi tôi bấm vào href gọi là "Test" mà sẽ gọi hàm php.

+4

chỉ đơn giản là không có, không có cách nào để làm điều này, ngoại trừ gọi phương thức yêu cầu sử dụng ajax. – TheVillageIdiot

+9

Bạn biết: PHP chạy trên máy chủ, nhưng JS trên máy khách? _cannot_ này hoạt động theo cách này. – KingCrunch

+0

chờ đợi, không phải là ' 'render bởi php khi trang được tải? nếu có thì anh ta có thể nhận được đầu ra của 'truy vấn (" hello ")' trong hàm js. – TheVillageIdiot

Trả lời

131

Đây là bản chất, những gì AJAXcho. Trang của bạn tải và bạn thêm sự kiện vào phần tử. Khi người dùng khiến sự kiện được kích hoạt, hãy nói bằng cách nhấp vào nội dung nào đó, Javascript của bạn sử dụng XMLHttpRequest object để gửi yêu cầu tới máy chủ.

Sau khi máy chủ phản hồi (có thể với đầu ra), một hàm/sự kiện Javascript khác cho bạn một nơi để làm việc với đầu ra đó, bao gồm chỉ cần gắn nó vào trang như bất kỳ đoạn HTML nào khác.

Bạn có thể làm điều đó "bằng tay" với Javascript đơn giản hoặc bạn có thể sử dụng jQuery. Tùy thuộc vào kích thước của dự án và tình huống cụ thể của bạn, nó có thể đơn giản hơn để chỉ sử dụng Javascript đơn giản.

Plain Javascript

Trong ví dụ rất cơ bản này, chúng tôi gửi một yêu cầu đến myAjax.php khi người dùng nhấp vào một liên kết. Máy chủ sẽ tạo ra một số nội dung, trong trường hợp này là "hello world!". Chúng tôi sẽ đưa vào phần tử HTML với id output.

Các 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; 
} 

HTML

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

Các PHP

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

Hãy thử nó ra: http://jsfiddle.net/GRMule/m8CTk/


Với một thư viện javascript (jQuery et al)

Có thể cho rằng, đó là rất nhiều mã Javascript. Bạn có thể rút ngắn điều đó bằng cách thắt chặt các khối hoặc sử dụng nhiều toán tử logic hơn, tất nhiên, nhưng vẫn còn rất nhiều thứ đang diễn ra ở đó. Nếu bạn có kế hoạch làm rất nhiều loại điều này trong dự án của bạn, bạn có thể tốt hơn với một thư viện javascript.

Sử dụng cùng một HTML và PHP từ trên cao, đây là toàn bộ tập lệnh của bạn (với jQuery được bao gồm trên trang). Tôi đã thắt chặt lên mã một chút để phù hợp hơn với phong cách chung của jQuery, nhưng bạn sẽ có được ý tưởng:

// handles the click event, sends the query 
var function getOutput() { 
    $.ajax({ 
     url:'myAjax.php', 
     complete: function (response) { 
      $('#output').html(response.responseText); 
     }, 
     error: function() { 
      $('#output').html('Bummer: there was an error!'); 
     } 
    }); 
    return false; 
} 

Hãy thử nó ra: http://jsfiddle.net/GRMule/WQXXT/

Đừng vội vã ra cho jQuery chỉ chưa: thêm bất kỳ thư viện nào vẫn đang thêm hàng trăm hoặc hàng nghìn dòng mã vào dự án của bạn cũng giống như bạn đã viết chúng. Bên trong tệp thư viện jQuery, bạn sẽ tìm thấy mã tương tự như trong ví dụ đầu tiên, cộng thêm toàn bộ lô khác. Đó có thể là một điều tốt, nó có thể không. Lập kế hoạch và xem xét quy mô hiện tại của dự án của bạn và khả năng mở rộng và môi trường hoặc nền tảng mục tiêu trong tương lai.

Nếu đây là tất cả những gì bạn cần làm, hãy viết javascript đơn giản một lần và bạn đã hoàn tất.

Documentation

+1

-1, một nửa câu trả lời, OP hỏi làm thế nào để gọi một hàm php từ javascript. Pou chỉ cho thấy làm thế nào để gọi một PAGE php. Bạn cần phải thêm các biến post trong cuộc gọi ajax và kiểm tra php cho các biến post đó và sau đó gọi hàm php đó nếu các biến post đó tồn tại. –

+5

@Hanoncs Với sự sắp xếp gần như vô hạn của mã phía máy chủ, nó không mang tính xây dựng hoặc thậm chí có thể cho tôi để đoán kiến ​​trúc mà OP đang sử dụng. Nó không phải là germane để báo cáo vấn đề ngay lập tức, hoặc, kể từ khi OP không tham chiếu POST (hoặc GET) hoặc cần phải vượt qua các giá trị. Tôi nghĩ rằng downvote của bạn là thất lạc, và tôi sẽ không được thêm vào câu trả lời của tôi tùy ý đầu cơ về một chủ đề không có trong OP.Cảm ơn phản hồi mặc dù. –

13

PHP được đánh giá tại máy chủ; javascript được đánh giá tại máy khách/trình duyệt, do đó bạn không thể gọi hàm PHP từ javascript trực tiếp. Nhưng bạn có thể đưa ra một yêu cầu HTTP tới máy chủ sẽ kích hoạt một hàm PHP, với AJAX.

+2

@Hanoncs: Đây ** là ** câu trả lời. OP hỏi bạn có thể thực hiện một hàm PHP thông qua JS hay không. Câu trả lời là - ** bạn không thể **. Nếu anh ta sẽ hỏi liệu bạn có thể đưa ra một yêu cầu HTTP sẽ làm cho máy chủ web kích hoạt một tập lệnh PHP sẽ chạy một hàm PHP - thì có - ** rằng ** là có thể. Nhưng anh ta không yêu cầu điều này, tôi không viết dữ liệu không liên quan. – Dor

+6

Haha đến với người đàn ông, bạn biết đó là những gì OP có nghĩa là bởi câu hỏi của mình. nếu anh ta biết cách giải thích chính xác như thế thì anh ta sẽ biết cách làm thế nào. –

10

Cách duy nhất để thực hiện PHP từ JS là AJAX. Bạn có thể gửi dữ liệu đến máy chủ (cho ví dụ, GET /ajax.php?do=someFunction) sau đó trong ajax.php bạn viết:

function someFunction() { 
    echo 'Answer'; 
} 

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

và sau đó, nắm bắt được câu trả lời với JS (Tôi đang sử dụng jQuery để thực hiện các yêu cầu AJAX)

Có thể bạn sẽ cần một số định dạng câu trả lời. Xem JSON hoặc XML, nhưng JSON rất dễ sử dụng với JavaScript. Trong PHP bạn có thể sử dụng hàm json_encode ($ array); được mảng làm đối số.

2

Gần đây tôi đã công bố một plugin jQuery cho phép bạn thực hiện chức năng PHP gọi theo nhiều cách khác nhau: https://github.com/Xaxis/jquery.php

đơn giản ví dụ sử dụng:

// 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/"] 
+4

Bên cạnh những người thiên vị rõ ràng có liên quan đến việc gọi các hàm PHP thông qua JavaScript, giải thích cho tôi chính xác tại sao câu trả lời của tôi đã bị bỏ phiếu nhiều như nó có? Tôi trả lời một cách hợp pháp câu hỏi trong tay với một giải pháp, phải không? – Xaxis

-1

PHP được đánh giá tại máy chủ ; javascript được đánh giá ở trình khách/trình duyệt, do đó bạn không thể gọi hàm PHP trực tiếp từ javascript. Nhưng bạn có thể đưa ra một yêu cầu HTTP tới máy chủ sẽ kích hoạt một hàm PHP, với AJAX.

Sử dụng AJAX gọi chúng ta có thể gọi hàm php, sử dụng POST và GET phương pháp,

+1

wow bạn đã sao chép và dán một người nào đó elses trả lời. downvote. – jdmdevdotnet

Các vấn đề liên quan