Jump to content
  • 0

С чем связывать AJAX?


Hoax
 Share

Question

Допустим есть 3 файла (controller, model, view), первый получает запросы (POST) и передает второму, который записывает их в бд, а третий подготавливает их к выводу в шаблоне.

 

Т.е. MVC.

 

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

 

Если в ajax указать связь с файлом, который записывает данные бд (что очень удобно, т.к. мы получили запрос и сразу записали его), то этот класс (класс записи в бд) должен вызываться именно файле, в котором он объявлен (т.е. если в файле model.php мы объявили класс, то в нем же и должен идти вызов, т.е. $m = new model();    ) иначе AJAX не сможет организовать передачу.

 

Т.е. при том условии, что класс model (в файле model.php) который записывает данные в бд, вызывается, скажем, в файле random.php, аякс не пашет.

 

Как правильно организовать передачу, а то я уже запарился, надеюсь понятно объяснил, заранее спасибо.

Edited by Hoax
Link to comment
Share on other sites

11 answers to this question

Recommended Posts

  • 0

а какая разница, какой запрос приходит - ajax или обычный get?
Схема та же.

 

запрос (не важно какой) -> router -> controller -> model -> controller -> view -> browser.

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

Точка входа то одна, и это - роутер. А он уже решает, что куда

Link to comment
Share on other sites

  • 0
а какая разница, какой запрос приходит - ajax или обычный get?

 

разница в том, что если я передал обычный get- (или) post-запрос средствами php в контроллер, я этот контроллер (точнее его класс) смогу инклудить в файл random.php и вызвать его из random.php с данными запроса. 

 

А ajax отказывается выполняться, если вызов класса происходит в другом файле.

Link to comment
Share on other sites

  • 0

Если в серверном файле указать следующее.

// model.phpclass a {public function a() { echo $_POST['href']; }}$a = new a();$a->a();

Вернет значение $_POST;

 

А если в нем указать

// model.phpclass a {public function a() { echo $_POST['href']; }}
// global.phpinclude 'model.php';$a = new a();$a->a();

Ничего не выйдет

Edited by Hoax
Link to comment
Share on other sites

  • 0

Если в серверном файле указать следующее.

// model.phpclass a {public function a() { echo $_POST['href']; }}$a = new a();$a->a();

Вернет значение $_POST;

 

А если в нем указать

// model.phpclass a {public function a() { echo $_POST['href']; }}
// global.phpinclude 'model.php';$a = new a();$a->a();

Ничего не выйдет

во-1, надо видеть что там за "серверный файл"

во-2, можно попробовать required_once вместо include

в-3, надо смотреть более общно. Тк с виду - все нормально, а ошибка там, где вы не показали

Link to comment
Share on other sites

  • 0
Не понятно что хотите, свой mvc фреймворк написать ?

 

Я всего лишь хочу передать значение запроса в условиях аякса.

 

Код аджакса и скриншот ошибки приведите здесь.

 

Код самый обычный, брал с js ru

 

Скопирую.

// Пример с POSTvar xhr = new XMLHttpRequest();var params = 'name=' + encodeURIComponent(name) +   '&surname=' + encodeURIComponent(surname);xhr.open("POST", '/submit', true)xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')xhr.onreadystatechange = ...;xhr.send(params);

 

Постараюсь еще раз объяснить в чем проблема.

 

Не получается передать значение $_POST между файлами.

 

 

Если ajax составить так - 

// tmp.phpxhr.open("POST", '/model.php', true)

А серверный файл так

// model.phpecho $_POST['text'];

То model.php получит значение (POST) и вернет его (echo).

 

 

Но если будет так.

// model.phpclass model {  public function f() {  echo $_POST['text'];  }}// ajax сможет получить значение и его вернуть в том случае, если будет вызван соответствующий метод// т.е. этот :$obj = new model();$obj->f(); // НО (основная проблема), если метод $obj->f() я вызываю ИЗ ДРУГОГО файла, php говорит, что несуществует $_POST['text'], и ajax // ничего не возвращает

Ошибка одна, со стороны php - отсутствует значение $_POST (но это даже не ошибка, просто пока значения этого значения нет (ничего не введено в форму. if(!empty($_POST['text'])) echo $_POST короче).

 

Со стороны js, просто отсутствует вывод этого значения.

 

Пробовал require_once - аналогично.

 

Предположу, что это связано с очередной обработкой php и js

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy