Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.03.2015, 02:59
Профессор
Отправить личное сообщение для hoax Посмотреть профиль Найти все сообщения от hoax
 
Регистрация: 20.09.2012
Сообщений: 151

Возврат значения в ajax
На php у меня шаблон mvc, но вот проблема не знаю как оптимизировать ajax под него, ибо в xhr.open(указывается ссылка на обработчик), скажем который получает $_POST.

И тот самый обработчик .php, получает значение и одновременно возвращает лишь в том случае, если класс обработчика вызван в этом же файле (файле обработчика). т.е.

1)ajax файл : xhr.open('file1.php');
2)php файл (file1.php) :

class A { function a() { echo $_POST['text']; } };
$obj = new A();
$obj->a();

При таком раскладе file1 получит значение и ajax вернет его, но если экземпляр класса был создан в другом файле, или был вызван метод ф-и в другом файле - аргумента нет.

Таким образом вообще не получает получить значение с помощью ооп и непонятно какому файлу передавать ajax-запрос, то ли контроллеру, то ли модели, то ли виду.
Ответить с цитированием
  #2 (permalink)  
Старый 23.03.2015, 16:56
Профессор
Отправить личное сообщение для hoax Посмотреть профиль Найти все сообщения от hoax
 
Регистрация: 20.09.2012
Сообщений: 151

Проблему все еще не удалось решить, наглядно описал ее здесь http://htmlforum.ru/index.php?showtopic=52395&p=350739
Ответить с цитированием
  #3 (permalink)  
Старый 23.03.2015, 18:22
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Пусть в файле class.php содержится ваш класс.

Другой файл, в котором форма (Ajax ли работает или без него, ведь роли ни какой не играет), ее обработчик:

<?php
include "class.php";

if($_POST) {
    $obj = new model();
    $obj->f();
}
?>
<form method="post">
<input name="text" value="2" />
<button>GO</button>
</form>


Отправляйте форму. Работает?
Ответить с цитированием
  #4 (permalink)  
Старый 23.03.2015, 21:05
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Классы с маленькой называть как-то неприлично.
Ответить с цитированием
  #5 (permalink)  
Старый 27.03.2015, 17:27
Профессор
Отправить личное сообщение для hoax Посмотреть профиль Найти все сообщения от hoax
 
Регистрация: 20.09.2012
Сообщений: 151

Сообщение от laimas Посмотреть сообщение
Пусть в файле class.php содержится ваш класс.

Другой файл, в котором форма (Ajax ли работает или без него, ведь роли ни какой не играет), ее обработчик:

<?php
include "class.php";

if($_POST) {
    $obj = new model();
    $obj->f();
}
?>
<form method="post">
<input name="text" value="2" />
<button>GO</button>
</form>


Отправляйте форму. Работает?
Попробовал, не работает. Пишет что также нету $_POST
Ответить с цитированием
  #6 (permalink)  
Старый 27.03.2015, 17:40
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Что нет $_POST быть не может, ибо это суперглобальный массив и он есть всегда, другое дело, что он может быть пуст.
Ответить с цитированием
  #7 (permalink)  
Старый 27.03.2015, 18:10
Профессор
Отправить личное сообщение для hoax Посмотреть профиль Найти все сообщения от hoax
 
Регистрация: 20.09.2012
Сообщений: 151

Это я и имею в виду.

Удалось лишь реализовать передачу как указывал выше, с помощью вызова класса в этом же файле. Неудобно, но больше никак не получается
Ответить с цитированием
  #8 (permalink)  
Старый 27.03.2015, 18:40
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Ну у меня же не какой-то особенный РНР, и пример то простой, и он выполняется. Если этот примем у вас не работает, тогда даже и предположить трудно что у вас творится.
Ответить с цитированием
  #9 (permalink)  
Старый 27.03.2015, 19:18
Профессор
Отправить личное сообщение для hoax Посмотреть профиль Найти все сообщения от hoax
 
Регистрация: 20.09.2012
Сообщений: 151

А что у меня может твориться?

Вот код

// php.php

class a {

   public function a() {

   echo $_POST['href'];
	
	}


	}




// ajax

<p id="submit">go</p>
<p id="ajax"></p>


<?php

include 'php.php';

$c = new a();
$c->a();


	



?>


<script>

document.getElementById('submit').addEventListener('click', function(e) {



	var xhr = new XMLHttpRequest();
	
	xhr.onreadystatechange = function() {
	
	
		if(xhr.readyState == 4) document.getElementById('ajax').innerHTML = xhr.responseText;
	
	}


	
	 
	xhr.open('POST', '/my/php.php',true);
	
	xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
	
	xhr.send('href=errreg');
	
	}, false);

</script>
Ответить с цитированием
  #10 (permalink)  
Старый 27.03.2015, 22:03
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

class a {
public function a() {

И что в итоге будет? Не дважды ли получите значение?

Если вы выполняли пример, в котором нет Ajax, что в прочем не играет роли, и он не выполнялся, то что-то вы колбасите свое, а что не знаю.

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

Класс, лежит по тому же пути что и файл обработчик - в папке my.

class a {
    public function f() {
        print_r($_POST);
    }
}


Файл обработчик и непосредственно html, то есть все в одном.

<?php
if($_POST) {
    include 'class.php';
    $c = new a();
    $c->f();
    exit;
}
?>
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
</head> 
<body>
<button id="submit">GO</button>
<script> 
document.getElementById('submit').addEventListener('click', function() {
    var xhr = new XMLHttpRequest();
    xhr.open('POST', location);
    xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xhr.onload = function() {
        if(xhr.status == 200) alert(xhr.responseText);
    }
    xhr.send("d=1");
}, false);
</script>
</body> 
</html>


И проблем никаких.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возврат значения из функции eniacty Общие вопросы Javascript 4 17.11.2014 16:50
Возврат принятого значения внешней функции из jquery ajax pro_xaoc jQuery 2 20.06.2014 12:20
Ajax запрос. Возврат массива. Rinas jQuery 5 09.04.2011 18:58
AJAX обращение к файлу php и получение значения zeraid jQuery 8 28.03.2011 14:46
возврат увеличенного значения AJAX mikeles AJAX и COMET 0 31.10.2009 08:48