10.04.2015, 18:13
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Сообщение от hoax
|
Если указать то что вы написали, в файле ajax.php, при клике он будет вызывать сам себя.
|
Харе тупить. В браузере никаких php не существует.
Кто сделал хтмл - аякс.пхп или даздраперма.пхп - николебет. Более того, хмтл вообще нафиг не нужен чтобы посылать какие-то запросы. И клики не нужны.
скрипт из браузера посылает http ЗАГОЛОВОК на сервер, сервер открывает указанный урл, с этого урла идет ответ по http - браузер его получает и повинуясь скрипту в событии использует полученные данные.
Все просто до невозможности.
|
|
10.04.2015, 18:14
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Сообщение от hoax
|
Php возвращает ошибку отсутствие данной ф-и
|
Если у вас гавнокоды - так все и будет продолжаться.
Это вообще самый легкий вариант с конкретным указанием скрипта-процессинга. Там думать вообще не надо - там написал имя, тут написал логику и сразу echo.
Сложнее когда все идет через индекс, потому что тогда вообще все должно работать быстро и эффективно, иначе толку с аякса не будет.
Через индекс запускают для реюза, иначе ajax.php превращается в еще одну точку входа. А назера еще одна, если она уже есть.
ЗЫ Я главного не понял - как вы проверяете какие-то переменные в скрипте, который вообще не запускается по запросу?
Последний раз редактировалось kostyanet, 10.04.2015 в 18:25.
|
|
10.04.2015, 18:59
|
Профессор
|
|
Регистрация: 20.09.2012
Сообщений: 151
|
|
Сообщение от kostyanet
|
Если из браузера идет xhr.send('GET', 'script.php', true) значит именно в script.php все должно быть и дальнейшая реализация абсолютно никого не колебет.
|
Если у меня есть файл записи в бд, то в xhr.open() я буду указывать именно этот файл, это и есть реализация. Но вызывать класс бд я буду из другого файла. А вы мне че предлагаете, запихнуть в script отдельную модель и вид и возвращать ответ сервера с этого файла, потому что с другими он не работает?
Мне человек говорит что у него все получается, с теми примерами которые указывал он. Если у меня говнокод, то где он? Я кинул чистые примеры, там три строчки кода всего, могу даже скинуть директорию с целыми двумя файлами
|
|
10.04.2015, 19:13
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Не совсем понял, но файл можно и не подключать а сразу вызвать.
А если сделать так -
// script.php
function f() {
echo 'text';
}
// ajax.php
<?php
include 'script.php'; // подключили
f(); // и вызвали, PHP вернул echo
?>
...
xhr.send('GET', 'script.php', true); // а вот js нет
Вопрос - чего вы ловите в ajax.php, если к нему обращения вообще нет? Ничего не перепутано, так и есть исполнение?
|
|
11.04.2015, 06:32
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Да он просто не знает что надо послать заголовок предваряющий заголовок запроса, чтобы контроллер или модель поняли что это аякс.
Во всех фреймворках так сделано и в том числе жикверя посылает такой.
|
|
11.04.2015, 06:39
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Вот так
link.open("POST",window.location.href);
link.setRequestHeader("X-Requested-With","XMLHttpRequest");
link.send(form_data);
protected function get_ajax() {
return $this->_d['ajax']=isset($_SERVER['HTTP_X_REQUESTED_WITH'])
&& strcasecmp($_SERVER['HTTP_X_REQUESTED_WITH'],'xmlhttprequest')==0;
}
через геттер класса контроллера проверка выглядит так
if($this->ajax) {
}
Все идет через индекс и любой компонент теперь может узнать что это - аякс.
Вот для get общая самопальная функция
var send_get=function(url,func) {
var link=new XMLHttpRequest();
link.onreadystatechange=function(){
if(this.readyState==4) {
document.body.style.cursor='auto';
try{func(this);}
catch(e){console.log(this.responseText);
alert("Link Error! "+e+": "+this.statusText);}
}
};
link.open("GET",url);
link.setRequestHeader("X-Requested-With","XMLHttpRequest");
link.send();
document.body.style.cursor='wait';
};
|
|
11.04.2015, 06:57
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Сообщение от hoax
|
И тот самый обработчик .php, получает значение и одновременно возвращает лишь в том случае, если класс обработчика вызван в этом же файле (файле обработчика). т.е.
|
Не лишь в том случае, а единственно в случае, иначе файл попросту не будет запущен и ничего не сделает. Это настолько фундаментально, что берут сомнения в нормальности логики вашего приложения.
В одноточечной системе все запросы идут через индекс. Следовательно в любом месте можно сделать ветку на обслуживание запросов по аяксу, но, тогда одноточка превращается в граф. В этот же граф превращается система когда вы посылаете запросы на любой произвольный файл. Думая что так будет быстрее и эффективнее. Типа не надо поднимать все эти конфиги, строить деревья и все такое чтобы отдать какую-то там единичку в браузер.
Все это полная фигня. На фоне ресурсов которые подняты на сервере чтобы отдать эту единичку, расходы на ваши скрипты мизерны. Ну, если они, скрипты, хоть немного написаны по-человечески. Поэтому все идет нормально как предусмотрено, а флаг "это аякс" позволяет срезать углы и прокалывать иерархию чтобы побыстрее ответить, только и всего.
Самый жирный кусок пхп - это рендер. Условно говоря за экономию килограмма рендера вы можете нагрузить ракету-носитель десятью кило дополнительной логики. Поэтому аякс всегда быстрее, даже если идет по тому же пути, просто потому что там либо вообще не будет рендера, либо он окажется минимальным.
Насчет сервера. Скажем чтобы отдать файл my-lovely-chick.jpg какой-то там nginx или типа того потратит 1 у.е. А чтобы отдать 1 или 0 в браузер на вопрос "а такое имя в базе есть?" nginx летит в унитаз, поднимается вся эта пхп-шная тряхомудия, со всеми либами включая майскуль, это сколько там - мегов 30-40 надо выделить, потом идет запрос select id from users where name ="Вася" и отдача байта через json, что можно оценить уже в 1000 уе. Ну и где вы тут сэкономите если начнете размножать файлы по одному на запрос?
Последний раз редактировалось kostyanet, 11.04.2015 в 07:05.
|
|
11.04.2015, 07:14
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Сообщение от hoax
|
Если у меня есть файл записи в бд, то в xhr.open() я буду указывать именно этот файл, это и есть реализация.
|
Бред какой-то, "файл записи в бд". Вы очевидно доктринер и варитесь в своих соках не пытаясь узнать как вообще делается, как люди делают. Что там подсмотрели - просто не поняли. Как вы пишите, потому что, так не может работать, в приципе.
Какой еще нахрен файл записи в бд? С любого места можно записать что угодно куда хочешь. Чтобы не повторять запросы вы их просто сохраняете в модели как в конфиге, ага, а зачем тогда оттуда брать - пусть сама и записывает. А кто мешает подключить ту же модель в любом произвольном файле? Никто. А зачем ее где-то еще подключать, если она и сама все сделает когда до нее дойдет очередь увидев что это аякс. А зачем ей ждать своей очереди если уже известно что это аякс и можно посмотреть где можно срезать...
Все эти варианты и решаются по месту в рамках вашей рамки.
|
|
|
|