Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 24.02.2015, 20:06
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Значит так:

данный цикл создавался для того чтоб данные из базы упаковать в массив

Стоит ли начинать цикл, если не знаем вернул ли запрос результат? Почему не?:
if($VB) {
    if(mysql_num_rows($VB)) {
        while($row = mysql_fetch_object($VB)) $vbi[] = $row->field_name;
    } else $msg = 'Empty';
} else $msg = DEBUG ? __FILE__ .'/'. __LINE__ .'/'. mysql_error() : 'Sorry';


где $msg - определяет для клиента сообщение, DEBUG - задает режим отладка/вывод.

Зачем $vbi[$i]? Вы думаете что таким образом индексы массива станут более "индексными"?

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

а главный вопрос как мне избежать вывода этого массива на главной странице из-за print json_encode($all);

Не выполнять print, что еще можно сказать.

Последний раз редактировалось laimas, 24.02.2015 в 20:10.
Ответить с цитированием
  #32 (permalink)  
Старый 24.02.2015, 21:56
Аспирант
Отправить личное сообщение для kiberchainik Посмотреть профиль Найти все сообщения от kiberchainik
 
Регистрация: 19.02.2015
Сообщений: 43

Сообщение от laimas Посмотреть сообщение
Значит так:

данный цикл создавался для того чтоб данные из базы упаковать в массив

Стоит ли начинать цикл, если не знаем вернул ли запрос результат? Почему не?:
if($VB) {
    if(mysql_num_rows($VB)) {
        while($row = mysql_fetch_object($VB)) $vbi[] = $row->field_name;
    } else $msg = 'Empty';
} else $msg = DEBUG ? __FILE__ .'/'. __LINE__ .'/'. mysql_error() : 'Sorry';


где $msg - определяет для клиента сообщение, DEBUG - задает режим отладка/вывод.

Зачем $vbi[$i]? Вы думаете что таким образом индексы массива станут более "индексными"?

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

а главный вопрос как мне избежать вывода этого массива на главной странице из-за print json_encode($all);

Не выполнять print, что еще можно сказать.
я пробовал не выполнять принт и ничего не работало, и пробовал вместо принт писать ретурн, так же не работало, а за поучение с массивом спасибо, и маленькое уточнение: $vbi[] = $row->field_name; если поля два, как их можно добавить в этот массив $vbi[]? буду все мотать на усы (хоть бы их хватило )) )

Последний раз редактировалось kiberchainik, 24.02.2015 в 22:01.
Ответить с цитированием
  #33 (permalink)  
Старый 24.02.2015, 23:52
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Я не поучаю, я вопрошаю - почему так пишите? Как это понимать - "я пробовал не выполнять принт и ничего не работало, и пробовал вместо принт писать ретурн, так же не работало"? Вы что не представляете задачу, которую решаете, не понимаете назначений print, return, etc...? Ну тогда либо бросайте это занятие, либо учитесь применять инструменты языка.

$vbi[] = $row->field_name; - это всего лишь пример показывающий, что указывать принудительно индекс массива там, где в этом нет необходимости нет смысла. Конечно, в вашем случае помещение в этот индекс массива (ряда из ресурса) это $vbi[] = $row; А вообще пора отвыкать от MySQL расширения, не будет в дальнейшем РНР его поддерживать, и изучайте PDO. В этом случае под РНР версии не ниже 5.4 ваш запрос и результат мог бы выглядеть так:

$VB = $db->prepare("SELECT id, nome_corto FROM criteri WHERE id_filter=? AND meta=?");
$VB->execute([$filter_id, 'Vetri decorati'])->fetchAll();

здесь fetchAll() возвращает готовый массив всех возвращенных запросом рядов. Какой тип будет возвращаться можно установить в настройках PDO. Можно и "на лету менять" тип, если настроили возвращать как объекты, а в этой выборке нужен индексный массив, значит можно для этой выборки это указать - fetchAll(PDO::FETCH_NUM). Ошибки обрабатывать нужно глобально.

Если определяете для диалога клиент-сервер тип данных как json, то не так и сложно определить соглашения для всего приложения - если клиент получил объект со свойством err, значит вернулась ошибка, выводится сообщение об ошибке и обслуживаемое не индивидуальным сценарием для каждого такого диалога, а, пусть функцией, которая выводит сообщения. При этом другие действия на клиенте не выполняются, смысла нет. Если же объект возвращенный содержит свойство msg, значит может выводится и сообщение, и выполняться иные сценарии с возвращенными данными.

У вас же вообще в приложение не заложено никакой логики, вот вы и гадаете. Вот только начинать писать надо не с print и т.п., а с понимания того, чего нужно, и что для этого потребуется, и от общего к частному, а не наоборот.
Ответить с цитированием
  #34 (permalink)  
Старый 25.02.2015, 00:59
Аспирант
Отправить личное сообщение для kiberchainik Посмотреть профиль Найти все сообщения от kiberchainik
 
Регистрация: 19.02.2015
Сообщений: 43

вернусь к началу чтоб больше не было слов но отсутствии логики..
задача состояла в следующем: создать селект после выбора в котором будут загружаться из базы другие N'ые селекты с данными и обязательно, без перезагрузки страницы! вот и вся логика! я знаю что для реализации этого вопроса необходима форма, код клиента и код сервера, обработчика. учитывая большой недостаток моих знаний, я начал рыскать ответ в сети, то что я выкладывал это и есть пример из сети который я лишь пытался адаптировать под свои требования! в процессе разбора и адаптирования все заработало за исключением того что выводится массив на сайт в виде строки благодаря принт! кстати говоря значения принт ретурн еко и др. я прекрасно знаю но в среде php! а так же именно везде я встречаю что! чтоб передать ответ от сервера в виде массива необходимо сделать print json_encode($array) или echo json_encode($array)
именно так я и поступал! логика есть и она ясна как день! я не взял эту задачу с потолка и не пытаюсь просто так достать людей!
Ответить с цитированием
  #35 (permalink)  
Старый 25.02.2015, 01:09
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

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

Не обязательно print или echo, если на этом работа сервера заканчивается, а далее есть еще код, то чтобы он не выполнялся нужно exit(json_encode($array));

Если у вас вместо того чтобы эти данные вернулись в ответ на асинхронный запрос они они вываливаются на страницах, то именно логика вашего приложения и хромает.
Ответить с цитированием
  #36 (permalink)  
Старый 25.02.2015, 10:24
Новичок на форуме
Отправить личное сообщение для grisina Посмотреть профиль Найти все сообщения от grisina
 
Регистрация: 25.02.2015
Сообщений: 2

Ну ты индеец... Ошибка какая?
И еще посмотри на вкладке Сеть ответ от сервера.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При отправке через ajax не открывается файл-адресат temuch-13 AJAX и COMET 6 09.07.2014 17:03
Ajax работает через раз MixMuz AJAX и COMET 7 04.07.2014 03:31
При подгрузке страницы через AJAX JS не отрабатывается, но подгружается vityurov Общие вопросы Javascript 2 20.06.2013 12:24
Вызов функции печати страницы полученной через AJAX Garik AJAX и COMET 4 02.03.2011 17:05
Просмотр передаваемых данных через AJAX Гость AJAX и COMET 3 04.08.2008 14:34