Как вызвать несколько функций PHP через AJAX, лучшие практики? - PullRequest
1 голос
/ 24 января 2012

У меня есть несколько вызовов ajax в нескольких функциях JavaScript.каждый делает сообщение / получает в functions.php файл

. functions.php имеет несколько функций, которые должны соответствовать функциям из JavaScript

, например, в js у меня есть:

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 немного запутывает способ, которым я пишу это, но в конце я хочу, чтобы function one имел дело только сс функцией corespondent из файла php.Очевидно, им не нужно иметь одно и то же имя.

функции php могут возвращать true или false, или 1, или 0, и это предполагаемые данные alert(data); * 1020.*

если есть больше путаницы в том, что я хочу, пожалуйста, дайте мне знать и плохо проясните,

спасибо

Ответы [ 2 ]

1 голос
/ 24 января 2012

Почему бы не разделить функции PHP на отдельные меньшие сценарии?Они обозначают разные конечные точки в вашем приложении и не могут быть вызваны вместе, поэтому они не должны быть вместе.

0 голосов
/ 24 января 2012

Вы проверили стиль библиотеки REST. Похоже, что вы делаете в основном это, но немного более запутанным. Когда я говорю REST library, я не имею в виду чисто RESTful библиотеку, но вместо этого каждая функция в вашем бэкэнде доступна через url.

То, как вы это делаете, прекрасно (до тех пор, пока данные функций не зависят от каких-либо других данных функций (поскольку это может привести к некоторым забавным результатам)). Просто намного проще сделать спокойный подход. Довольно просто настроить библиотеку отдыха.

Я просто нахожу, что выполнение всего $ _POST [...], а затем продолжаю делать это просто громоздко со временем и становится все труднее и сложнее в управлении, потому что всегда есть какой-то новый поворот в том, что нужно, тогда вы в конечном итоге с сотнями методов для заботы о вызове конечных функций.

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

Это javascript для создания новых API-ссылок, тогда вы можете получить что-то вроде

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

На вашем бэкэнде вам понадобится файл .htaccess, например,

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

Тогда вы могли бы написать оператор внутреннего переключателя, который бы разбирал состояние (разделителями были бы "/"), который переместил бы вас к вызову библиотеки времени окончания.

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

    echo json_encode($output);
?>

Таким образом, вывод всегда обрабатывается одинаково.


Так же, как записка. Это была ОЧЕНЬ простая и НЕПРАВИЛЬНАЯ реализация, но я нахожу, что ее намного проще поддерживать, чем $ _POST, который идет к 1 из 100 различных файлов, которые имеют очень схожий вывод и все такое.

Ура! Счастливое кодирование

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...