Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ajax + php]wywołanie funkcji php
Forum PHP.pl > Forum > XML, AJAX
bliitz
Witam

Zaczynam poznawać Ajax-a i mam pytanie. Załóżmy przykładowy kod:

example.php
  1. <?php
  2. class Example {
  3.  
  4. public function TEST() {
  5. }
  6.  }
  7. ?>


czy jest możliwość odwołania się do tej funkcji przez Ajax-a?
Tzn. jeśli wywołujemy:
  1. <?php
  2. xmlHttp.open(&#092;"POST\", \"example.php\", true);
  3. ?>

to czy można jakoś użyć tej funkcji?
Cezar708
zadaniem skryptu PHP jest wygenerowanie jakiegoś wyniku (oczywiście nie uściślając)...

.. więc jeśli w pliku PHP użyjesz tej metody, z zwróci Tobie wynik to możesz ten wynik jako request przesłać za pomocą AJAXa z powrotem do przeglądarki

pozdrawiam
Cezar708
bliitz
chodzi mi o zrobienie przyciusku co sprawdza czy login dostępny, i teraz jak mam plik z klasa walidacji gdzie jest kilka funkcji, to jak można wywołać tą jedną konkretą?
  1. <?php
  2. <form method="post">
  3. <input type="button" class="submit" value="Sprawdź" onclick="process()" /><span id="login_show"></span>
  4. </form>
  5. ?>


ajax
Kod
function process() {
  
   if(xmlHttp) {    
     try {
       var login = document.getElementById("login_sign").value;
       var params = "login="+login;
      
       display("<img src=\"img/wait.gif\" width=\"17\" height=\"17\"> Pobieranie danych")
      
       xmlHttp.open("POST", "example.php", true);
       xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
       xmlHttp.setRequestHeader("Content-length", params.length);
       xmlHttp.setRequestHeader("Connection", "close");
       xmlHttp.onreadystatechange = handleRequest;
       xmlHttp.send(params);
     }
     catch (e) {
       alert("Nie mozna nawiazac polaczenia z serwerem:\n" + e.toString());
     }
   }
}


walidacja php
  1. <?php
  2. class ValidateData extends Database {
  3.  
  4. public function validateLogin($login, $password) {
  5.  
  6. }
  7.  
  8. public function ValidatePHP() {
  9.  
  10. }
  11.  
  12. private function validateEmail($value) {
  13.  
  14. }
  15.  
  16. private function validateLoginSign($value) {
  17.  
  18. }
  19.  
  20. private function validatePassword($value) {
  21.  
  22. }
  23.  
  24. private function validatePasswordMatch($value, $value2) {
  25.  
  26. }
  27.  
  28. private function validateBirthMonth($value) {
  29.  
  30. }
  31.  
  32. private function validateBirthDay($value) {
  33.  
  34. }
  35.  
  36. private function validateBirthYear($value) {
  37.  
  38. }
  39.  
  40. private function validateReadTerms($value) {
  41.  
  42. }
  43.  
  44. private function validateSex($value) {
  45.  
  46. }
  47.  
  48. public function addComment($file_id, $user_id, $text) {
  49.  
  50. }
  51. }
  52. ?>
Cezar708
ok ale w tym js musisz mieć jeszcze zdefiniowaną funkcję handleRequest i w niej sprawdzasz, czy wynik działania funkcji skryptu example.php.

załóżmy, że plik example.php wygląda tak:

  1. <?php
  2. $validate = new ValidateData();
  3. if ( $validate->validateLoginSign($_POST['login']) ){
  4. die('OK');
  5. } else {
  6. die('fail');
  7. }
  8. ?>


to przechwytując requesta (handleRequest) sprawdzasz co jest wynikiem i ewentualnie dajesz info użytkownikowi

np:
  1. function handleRequest(obj){
  2. if ( obj.response == 'OK' ){
  3. alert('Login jest dostępny');
  4. } else {
  5. alert('Musisz wybrać inny login bo ten jest zajęty');
  6. }
  7. }


pozdrawiam
Cezar708
bliitz
hmm
no właśnie że tak można zrobić to wiem, tylko że teraz każda funkcja musi być w odzielnym pliku, bo jeśli ich jest kilka tak jak u mnie to nie ma chyba możliwści wywołania jednej konkretnej questionmark.gif

ps. w js mam:

Kod
var xmlHttp = createXmlHttpRequestObject();

function createXmlHttpRequestObject() {

  var xmlHttp;
  try {
    xmlHttp = new XMLHttpRequest();
  }
  catch(e) {
    var XmlHttpVersions = new Array('MSXML2.XMLHTTP.6.0',
      'MSXML2.XMLHTTP.5.0',
      'MSXML2.XMLHTTP.4.0',
      'MSXML2.XMLHTTP.3.0',
      'MSXML2.XMLHTTP',
      'Microsoft.XMLHTTP');
    for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++) {
      try {
        xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
      }
      catch (e) {}
    }
  }
  if (!xmlHttp)
    alert("Blad podczas tworzenia obiektu XMLHttpRequest.");
  else
    return xmlHttp;
}
function display($message) {
  myDiv = document.getElementById("login_show");
  myDiv.innerHTML = $message + "<br/>";
}
function process() {
  
   if(xmlHttp) {    
     try {
       var login = document.getElementById("login_sign").value;
       var params = "login="+login;
      
       display("<img src=\"img/wait.gif\" width=\"17\" height=\"17\"> Pobieranie danych")
      
       xmlHttp.open("POST", "ajax/ajaxCheckLogin.php", true);
       xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
       xmlHttp.setRequestHeader("Content-length", params.length);
       xmlHttp.setRequestHeader("Connection", "close");
       xmlHttp.onreadystatechange = handleRequest;
       xmlHttp.send(params);
     }
     catch (e) {
       alert("Nie mozna nawiazac polaczenia z serwerem:\n" + e.toString());
     }
   }
}

function handleRequest() {


     if(xmlHttp.readyState == 4) {
    
       if(xmlHttp.status == 200) {
        
           try {  
           document.getElementById("login_show").innerHTML = xmlHttp.responseText;          
           }
           catch(e) {      
           alert("Blad odczytania wiadomosci: " + e.toString());        
           }
       }
       else {
           alert("Blad w uzyskaniu danych:\n" + xmlHttp.statusText);
       }
     }
}
Cezar708
Cytat(bliitz @ 28.04.2008, 20:35:45 ) *
hmm
no właśnie że tak można zrobić to wiem, tylko że teraz każda funkcja musi być w odzielnym pliku, bo jeśli ich jest kilka tak jak u mnie to nie ma chyba możliwści wywołania jednej konkretnej questionmark.gif



zawsze możesz dodać parametr do wywołania... i dzięki temu określić co dokładnie chcesz sprawdzać:

  1. var params = "login="+ login + "&check=login_sign";

(UWAGA: nie wiem czy tak się przekazuje zmienne w Twoim obiekcie)

a następnie w example.php:

  1. <?php
  2. switch($_POST['check']){
  3. case 'login_sign':
  4. if ( $validate->validateLoginSign($_POST['login']) ){
  5. die('OK');
  6. } else {
  7. die('fail');
  8. }
  9. case 'email': 
  10. // itd.... 
  11. }
  12. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.