Codeigniter AJAX и POST - PullRequest
       2

Codeigniter AJAX и POST

0 голосов
/ 27 августа 2011

Каков наилучший способ обращения к сценарию AJAX, который отправляет данные в POST с помощью codeigniter?Прямо сейчас я загружаю представление с AJAX через $this->load->view('AJAX', $data);, однако в нем нет пользовательского интерфейса или действий пользователя.Он просто проходит через скрипт и возвращает данные POST немного после загрузки скрипта.Я получаю данные POST в моей модели, где я вводю значения в базу данных и выводю некоторые другие значения на основе данных.

Мне нужно открыть реальный вид, установить метатеги и впоследствии перенаправить пользователя на другой сайт.

Как мне решить эту проблему?

Проблема, с которой я столкнулсясталкиваюсь с тем, что я не могу открыть другое представление, потому что представление AJAX - это то, что находится в фокусе, но мне нужно, чтобы это представление AJAX было временным, которое в основном делает свое дело и отправляет в POST.может поиск / исследование к тому, что я описываю?Дайте мне знать, какие разъяснения необходимы, если таковые имеются.

1 Ответ

2 голосов
/ 27 августа 2011

Некоторым людям нравится писать контроллеры "ajax" и публиковать их исключительно на них, но вам не нужно этого делать.Вы можете обработать запрос в том же контроллере, который обрабатывает не-AJAX-запрос.Лично я исключительно возвращаю json, но вы можете вернуть куски HTML, если это работает лучше для вас.

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

Пример метода контроллера, отвечающего на запрос ajax или non-ajax:

function edit_user()
{
    $data['status'] = $this->user_model->save();
    if ($this->input->is_ajax_request())
    {
        // return json string with our update status
        // Something like: {"status":true}
        echo json_encode($data);
        exit;
    }
    // Load the non ajax view with the same data
    $this->load->view('users/edit', $data)
}

$this->input->is_ajax_request() является функцией Введите класс , который читает $_SERVER['HTTP_X_REQUESTED_WITH'] и проверяет, является ли его значение XMLHttpRequest.Это должно быть верно, только если это запрос «ajax».

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


Я думаю, что моя проблема в том, как мне обратиться к javascript без представления?как мне вызвать скрипт и / или куда поместить код JS в контроллер?Я чувствовал, что это было неправильное направление для обращения к коду в представлении, но я не видел, как еще это сделать.

По возможности, вы должны вставить javascript код вфайл .js и использование тега <script> для его загрузки в HTML-документе.Единственное другое исключение - это поместить его в файл «view» (файл, единственной целью которого является создание окончательного HTML-вывода).Другими словами, следуйте тем же правилам HTML, что и для размещения javascript, и следуйте обычным соглашениям MVC о том, где HTML принадлежит (в представлении).Код Javascript не принадлежит вашему контроллеру.Javascript не обрабатывает ваши данные, он отправляет данные на сервер.

Мне нужно открыть реальное представление, установить метатеги и впоследствии перенаправить пользователя на другой веб-сайт.

Если вы хотите загрузить представление, , а затем перенаправить (по истечении определенного времени, которое я предполагаю), вы можете сделать это с помощью javascript или <meta> тег (но не используйте метатег, используйте js).

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