Как обработать Ajax-запрос с помощью MVC в PHP - PullRequest
1 голос
/ 02 сентября 2011

Я сейчас работаю над своей собственной средой MVC на PHP. Я пытаюсь выяснить, как обрабатывать запросы Ajax, хотя ...

Страница создается с использованием URI www.domain.com/controller/method/params

Таким образом, URI передается через класс маршрутизатора, который получает контроллер и методы + параметры для использования.

Пока это звучит хорошо, но у меня также будет заголовок и нижний колонтитул, может быть, боковая панель даже на реальной странице, а MVC заполнит основную часть содержимого страницы.

Когда я делаю Ajax-запрос, например, www.domain.com/user/create: controller = user method = create

Затем я попытался бы снова построить всю страницу, поскольку она отправляет запрос в мое приложение.

Я не понимаю, как правильно с этим справиться?

Ответы [ 4 ]

3 голосов
/ 02 сентября 2011

Здесь есть несколько неполных ответов.Вот как вы это делаете, это довольно просто ...

Что вы делаете, это проверяете заголовок AJAX и обслуживаете другой контент на основе этого.Заголовок AJAX:

$_SERVER['HTTP_X_REQUESTED_WITH']

Для запросов AJAX будет установлено значение XMLHttpRequest.Это стандарт , за которым следуют все основные библиотеки javascript.

Когда я делаю Ajax-запрос, например, www.domain.com/user/create: controller = usermethod = create

Итак, зная это, мы можем проверить заголовок AJAX в вашем методе и соответственно отобразить вывод.

function create() {

    // code to create user

    if( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && strtolower( $_SERVER['HTTP_X_REQUESTED_WITH'] ) == 'xmlhttprequest') {
        // return new user id in json format (xml)
        die( json_encode( array( 'user_id' => $new_user_id ) ) );
    }

    // load views hear
}
1 голос
/ 02 сентября 2011

Это действительно зависит от того, с какой средой вы работаете, и как вы это делаете, но обычно я вместо рендеринга полного просмотра просто повторяю небольшой кусочек контента, который мне нужен.

Так что, если вы создаете пользователя через ajax, возможно, все, что вы хотите вернуть назад, - это целое число с идентификатором пользователя в случае успеха.

Итак:

class User {
 public function create(){
    $uid = //create user in database return primary key
    echo $uid;
    exit; //we stop execution here so we don't render the full layout
 }
}

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

Сравните это с обычной полностраничной операцией, где вы выбираете каждый компонент вашего макета, а затем визуализируете представление для конкретной страницы, которую вы загружали, например:

class Home {
public function index(){
    $homeView = //loadHomeView
 return $homeView
}

Обычно я так и поступаю, это не настоящий код, но надо понимать суть.

0 голосов
/ 02 сентября 2011

используйте die() или exit(), чтобы остановить выполнение предыдущего кода и отрисовку всей страницы

0 голосов
/ 02 сентября 2011

Можете ли вы указать, какую платформу вы используете?

Если вы используете какой-то стандартный каркас, то в каркасе есть несколько стандартных методов для использования запроса ajax, как в cakephp, есть макет по умолчанию, называемый ajax. В cakephp мы можем использовать что-то вроде $this->autorender = false для передачи некоторой строки json или xml.

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