2012-01-24 15 views
1

複数のJavaScript関数でいくつかのajax呼び出しがあります。それぞれが/ajaxを使用して複数のPHP関数を呼び出す方法、ベストプラクティス?

のfunctions.phpはJS、例えばJavaScriptの

からのものと対応している必要があり、複数の機能を持っていfunctions.phpファイルにポストを得るん私が持っている:

function one() { 
$.ajax({ 
    type: 'POST', 
    url: 'http://www.example.com/functions.php', 
    data: vals, 
    dataType:'json', 
    success: function (data) { 
     alert(data); 
    } 
}); 
} 

function two() { 
$.ajax({ 
    type: 'POST', 
    url: 'http://www.example.com/functions.php', 
    data: othervals, 
    dataType:'json', 
    success: function (data) { 
     alert(data); 
    } 
}); 
} 

function three() { 
$.ajax({ 
    type: 'GET', 
    url: 'http://www.example.com/functions.php', 
    data: { get_param: 'user' }, 
    dataType:'json', 
    success: function (data) { 
     alert(data); 
    } 

}); 
} 

PHPで私はこのようなものがあります:

if (isset($_POST['city'])) { // this comes from the javascript vals json object 
$city = $_POST['city']; 
    function one() { 
    // do something 

    return true; 
    } 
} 

function two() { 
// do something 
return true; 
} 


if (isset($_GET['get_param']) && $_GET['get_param'] == 'user'){ 
function three() { 
// do something 
return true; 
} 
} 

は多分、PHP側はビットが私はそれを書く方法を混同しているのが、最終的に、私はをしたいです210はphpファイルからのcorespondent関数を処理するだけです。明らかに、彼らは同じ名前を持つ必要はありません。

、PHPの関数は trueまたは falseまたは 1または 0を返すことができて、私は私が知っていると病気に明確にしてください何をしたいの詳細混乱がある場合には、警告データ alert(data);

すると仮定

ありがとう

答えて

0

あなたはRESTライブラリスタイルをチェックアウトしましたか?基本的にはあなたのように見えますが、ちょっと混乱します。私がRESTライブラリと言うとき、純粋にRESTfulなライブラリを意味するのではなく、バックエンドの各関数がurl経由でナビゲート可能です。

あなたのやり方は、(関数データが​​他の関数データに依存しない限り(面白い結果につながる可能性があります))。安らかなアプローチをもっと簡単に行うのはずっと簡単です。それはかなり簡単に休憩のライブラリを設定する。

私は、$ _POST [...]全体をやっていることが分かりましたし、それをやり続けることは時間が経つにつれて扱いにくくなり、管理するのがより困難になります。コールバック・エンド・ファンクションの世話をするための100のメソッドを使用します。新しいAPIへのリンクを生成するためのjavascriptのthats

MyApi = {  
    /** 
    * The API Version 
    */ 
    API_VERSION: "0.5", 
    SITE_URL: "http//myurl.com/", 
    /** 
    * The API URL 
    */ 
    apiURL: function(tokens) { 
     return MyApi.SITE_URL + MyApi.API_VERSION + "/api/" + MyApi.apiTokenizer(tokens); 
    }, 
    /** 
    * The tokenizer for the API. 
    */ 
    apiTokenizer: function(tokens) { 
     var str = ''; 
     $.each(tokens, function(key, value) { 
      str += value + "/"; 
     }) 
     return str; 
    } 
} 

、あなたのバックエンドで

function callBackend(tokens) { 
    $.ajax({ 
     type: 'POST', 
     url: MyLibrary.apiURL(tokens), 
     dataType:'json', 
     success: function (data) { 
      alert(data); 
     } 
    }); 
} 

のようなものを持っている可能性があり、あなたはそう

RewriteRule 0\.5/(.*) api/_MyApi.php?v=0\.5&state=$1 [QSA] 

次に、あなたのような.htaccessファイルが必要になります終了時ライブラリ呼び出しにナビゲートする状態(区切り文字は "/"になる)を分解するバックエンドスイッチステートメントを書くことができます。

<?php 
    $state = MyParser::Parse($_REQUEST["state"]); 
    $output = array(); 
    switch ($state) { 
     case "case1": 
      //do stuff 
      break; 
    } 

    echo json_encode($output); 
?> 

このように出力は常に同じ方法で処理されます。


メモと同様です。それは非常に単純で不完全な実装でしたが、私は、100%のファイルのうちの1つに行く$ _POSTよりも保守がずっと簡単であることが分かりました。

乾杯!ハッピーコーディング

+0

これは、 'callBackend([" user "、" comments "、5])'のようなもので、バックエンドのいくつかの関数に基づいて最新の5コメントを得ることができます。 – Michael

1

別の小さいスクリプトでPHP関数を分割してみませんか?これらはアプリケーション内の異なるエンドポイントを表し、一緒に呼び出すことはできないため、一緒に使用しないでください。