Howto: PHP / Javascript iletişim

6 Cevap php

Benim WebIDE geliştirmeye devam ediyorum, ben kendimi cevap veremem sorular geliyor tutmak. Proje diğerleri "normal" yaratmak ne oluşturmanıza yardımcı gerekiyordu, ama (mümkün olduğunca otomatik olarak yani) daha hızlı olmasıdır. Bu ışığında, benim sorum size bir PHP arka uç uygulamak nasıl?

İşte ben ne olduğunu. Ben JavaScript istemci arayabilirler "işlevleri" oluşturmak istiyorum. Genellikle, ben (POST ve JSON yoluyla) aradım (yanı sıra ben onu göndermek istediğiniz herhangi bir argümanlar) am "fonksiyonu" adını tutan "eylem" adında bir değişken gönderebilirsiniz. PHP kodu, daha sonra böyle bir şey görünüyor:

if(issset($_POST['action'])) {
    //function foo(arg1,arg2)
    if($_POST['action'] == 'foo') {
        $arg1 = $_POST['arg1'];
        $arg2 = $_POST['arg2'];
        //do stuff
    }
}

Ben hala PHP oluşturduğunuz diğer gerçek işlevlerini başvuruda bulunabilir, ama bu her şeyi ve JavaScript ve PHP hem de uygulamak kolay düzenlemek için güzel bir yol olduğunu bulmak.

Ne yaparsınız?

Edit 1: Tamam, bu sorunun ilk iki cevaplar dayalı, ben de kendimi anlatıyorum sanmıyorum.

Sana sonuna bir PHP geri nasıl ortaya soruyorum. Fikri size AJAX istemci JavaScript ile yazılmış (ya da belki başka bir şey, o doesn't matter), ve daha sonra POST ile backend PHP çağrı veya veri GET olacaktır. Bu verilere dayanarak, arka uç bunu yapmak için gereken ne yapacak (belki sadece veritabanını güncelleyecek ve belki de tekrar iade bilgileri: o doesn't matter).

Şimdi soru şudur: nasıl ne yapacağını söyleyebilirim? POST yoluyla ne gönderebilirim / GET ve nasıl backend onu yorumluyorsunuz?

6 Cevap

Ben büyük bir GET dizi backend'ine tüm veri göndermek.

actionpage.php? action = post & parametreler [parametre1] = değer1 & parametreler [parameter2] = value2

Eğer ($ _GET) print_r ise, PHP tarafında görürsünüz:

array(
    "action" => "create",
    "parameters" => array("parameter1"=>"value1","parameter2"=>"value2")
)

Bu ne sizin parametreleri döngü sağlamasıdır. Siz pap diyebilirim

 if($_GET['action'] == 'create'){
      foreach($_GET['parameters as $key=>$value){ //something

The question now is: how do you tell it what to do? What do you send via POST/GET and how do you interpret it in your backend?

Kendi kuralları seçin. Örneğin daha fazla parametre eklemek sonra, eylemi söyler JSON veri bir "eylem" değerini kullanın. Diğer web sitelerine ne görmek istiyorsanız Firefox Kundakçı uzantısı ile çeşitli web sitelerinin Ajax mesajları casus olabilir.

Örneğin Json POST verisi olabilir:

{
    action: "create",
    fields: {
       firstname: "John",
       lastname: "Doe",
       age: 32
    }
}

Eğer yeni oluşturulan kaydın kimliği ile cevap olabilir hangi.

Kaydı silmek için:

{
    action: "delete",
    keys: {
        id: 4654564
    }
}

vb

Php ajax işleyicisi, bir anahtarı gibi basit bir şey olabilir:

$jsonData = Services_Json::decode($_POST['json']);
switch ($jsonData->action)
{
    case "save":
        if (validate_json_data($jsonData->fields))
        {
            UsersPeer::create($jsonData->fields);
        }
        break;
    case "delete":
        /* etc */
}

// return a json reply with 
$jsonReply = new stdClass;
$jsonReply->status = "ok";
$jsonReply->statusMessage = "Record succesfully created";
echo Services_Json::encode($jsonReply);
exit;

Javascript, say prototype Ajax.Request responder function will output the error message in a specially created DIV if "status" is not "ok", vb..

Benim yönlendirme kolları ön sayfa denetleyicisi kullanın. Eğer kurarsanız sizin url ilk bölümü denetleyicisi (sınıf) anlamına gelir ve daha sonra sonraki segmentler içindeki yönteme geçirilen parametreleri takip yöntemlere başvurmak nerede çok temiz bitiş noktaları olabilir mod-yeniden.

http://domain.com/class/method/param1/param2

Sen fonksiyonlarını organize etmek gerekir? Bu 'sınıf' denir.

/// todo: add error processing
$name=$_GET['action'];
$args=json_decode($_GET['args']); /// or just subarray, doesn't matter

/// 'Action' is constant here but in reality you will need more then one class for this
/// because you will want modules in your framework
if(method_exists('Action',$name))
    call_user_func_array(array('Action',$name),$args);
else { /* incorrect parameters processing */ }

/// Ajax-available functions are here
class Action
{
    public static function action1()
    {
        echo 'action1';
    }
    public static function action2()
    {
        echo 'action2';
    }
}

Ben çok benzer bir şey yapmak. Ne gerek geri javascript geçmek için bir JSON nesne. Eğer PHP ile bittiğinde, geri ön ucuna bir nesne geçmek için json_encode arayabilirsiniz. Oradan JavaScript onunla daha fazlasını yapmak veya istediğiniz ancak biçimlendirebilirsiniz.

There is more information on a similar question here: http://stackoverflow.com/questions/393479/best-way-to-transfer-an-array-between-php-and-javascript/393497#393497

Düzenleme: düzenlemek okuduktan sonra, ben ne yapıyorsun iyi olduğunu düşünüyorum. Eğer gönderdiğinizde Javascript AJAX isteği bir "eylem" gibi değişken veya benzeri ne youd içerir. Oradan eylem bir durumda ve switch deyimi üzerinden ne olduğunu kontrol edebilirsiniz.

Ben genellikle normal fonksiyonları gibi php fonksiyonlarını yazmak.

fn1(arg1, arg2){
 //do stuff here
}
fn2(arg3){
 //do stuff here
}

Ben bir değişken denir eylem işlevin adını geçirir. Sonra bunu:

foreach($_POST as $key => $value) 
$$key = $value;

Argümanlar olarak aynı adı değişkenleri oluşturmak atamak.

Sonra şöyle uygun işlevi çağırmak için bir anahtar-çantası kullanın:

switch($action){
 case 'fn1':fn1(arg1,arg2);
 break;
 case 'fn2':fn2(arg3);
 break;
}

Bu sizin için ne arıyor?

Edit: (eğer anahtarı-davayı yazmak zorunda değilsiniz ya da sizin soap isteği işlev adı belirtirseniz, bu işlev otomatik olarak idam edilecek bir webcoder, geliştirmek için PHP SOAP and XML-RPC extension kullanabilirsiniz .) Java kullandım, ama PHP nasıl çalıştığını tam olarak emin değilim ettik.