Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Передача нескольких input и отправка запроса из ответа (Arcanum)
Author Message
Arcanum
Заглянувший



Joined: 24 Jun 2007
Posts: 10
Карма: 0
   поощрить/наказать

Location: Новосибирск

PostPosted: Wed Dec 19, 2007 8:41 pm (написано за 31 минуту 5 секунд)
   Post subject: Передача нескольких input и отправка запроса из ответа
Reply with quote

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

Вопрос номер 1.

Использую смарти + данную библиотеку. В смартевом шаблоне используя {foreach}{/foreach} и вывожу несколько полей типа text вот в таком виде
Code (html): скопировать код в буфер обмена
<input (december.com/html/4/element/input.html) type="text" name="categ[$id]" id="categ[$id]"> (december.com/html/4/element/.html)
в итоге, при просмотре кода получаю
Code (html): скопировать код в буфер обмена
<input (december.com/html/4/element/input.html) type="text" name="categ[1]" id="categ[1]"> (december.com/html/4/element/.html)
<input (december.com/html/4/element/input.html) type="text" name="categ[2]" id="categ[2]"> (december.com/html/4/element/.html)
...

и т.д. ну тут собственно ничего нового - все как обычно
но вопрос заключается при отправке данных сокращенным вариантом. Т.е. я пишу
Code (JavaScript): скопировать код в буфер обмена
<script type="text/javascript" language="JavaScript">

function quicksave() {
  JsHTTPRequest.query {
  'index.php?do=categs&sub=save',
  {
   'categ': document.getElementById("categ")
  },
  ...
  ...
  стандартный код запроса.
}
</script>
больше всего меня заботит вот эта строка
'categ': document.getElementById("categ") <- Как сюда передать только что созданный массив? Такой вариант не работает, потому что PHP код, получая эти данные делает следующее
Code (php): скопировать код в буфер обмена
...
foreach ($_REQUEST['categ''']
}
...
Но он не выполняется. Точнее сам запрос выполняется, но вернуться мне должны данные с теми изменениями, которые я вносил в текстовые поля, но данные возвращаются в том виде, в каком и были. Соответственно не выполняется форич на уровне ПХП, а не выполняется, потому что данные как-то не так пришли в ПХП))) Ну это я так думаю )))

Вобщем, наверное запутал я вас...если в кратце подвести итог, то вопрос такой: "Как передать массив ИНПУТОВ используя сокращенный метод выполнения запроса"?



Вопрос номер 2.

Быть может чуток сложнее ))) У меня есть tpl шаблон. Я в него подключил аякс либу в шапке (в <head>). Теперь, у меня в этом шаблоне есть 2 DIVа, например

<div id="content">Тут всегда основное содержимое страницы</div>
<div id="copy">Тут инфа из аякс ОТВЕТА</div>

Так вот, когда я например из меню навигации выбираю какой то раздел (а это АЯКС ЗАПРОС), у меня в ДИВЕ "content" отображается результат, и соответственно выводится то, что нужно...все честно как говориться, а вот дальше чехорда...Те данные, которые ПРАВИЛЬНО отобразились в диве "content" (ОТВЕТ ЗАПРОСА) - а это фактически подключенный еще один tpl мини-шаблончег, содержат ЕЩЕ ОДИН АЯКС ЗАПРОС, ответ которого должен появиться в ДИВЕ "COPY"
В этом, втором шаблоне, есть функция, например func2 - которая посылает запрос, так вот она не вызывается и мне всегда в консоли пишут func2 is not defined

В чем может быть проблема?

Опять наверное запутал? ))) Подводим короткий итог. Вопрос: "Нажал на ссылку, отправился аякс запрос, вернулось то что нужно, но в этом то, что нужно есть еще одна функция, которая отсылает запрос, но вызов этой функции не происходит и получаю ошибку func2 is not defined". Почему?


Спасибо всем.
Back to top
View user's profile Send private message Send e-mail
Arcanum
Заглянувший



Joined: 24 Jun 2007
Posts: 10
Карма: 0
   поощрить/наказать

Location: Новосибирск

PostPosted: Fri Dec 21, 2007 9:58 am (спустя 1 день 13 часов 16 минут; написано за 12 минут 28 секунд)
   Post subject:
Reply with quote

Так, ну ответ на второй вопрос помоему нашел сам.
Значит еще раз повторю, что при отправке первого запроса, у меня в массив $GLOBALS['_RESULT'] попадает вот такой код

$txt = file_get_contents('some_file.php'); <---- Обратите внимание, что в этом файле у меня есть например обычная ссылка с вызовом функции для аякса + САМА ФУНКЦИЯ НА JS
$GLOBALS['_RESULT'] = $txt;
По нажатию на первую ссылку ответ успешно приходит, я вижу новую, вторую ссылку, но по нажатии на нее not defined

Вопрос решается таким образом, что если ОБЕ ФУНКЦИИ разместить в НАЧАЛЬНОМ ФАЙЛЕ, а у второй сслыки только прописать onclick, то все работает!

Но, если все подитожить, то получается, что в первом файле я должен прописать ВСЕ, КАКИЕ ТОЛЬКО МОЖНО ФУНКЦИИ, КОТОРЫЕ У МЕЯН БУДУТ В СИСТЕМЕ!! Но это сколько же их там будет то???!!! Как обойти данную проблему?

Чтобы Вам было проще понять о чем идет речь, представьте себе админку для любой CMS. Например, я нажимаю на ссылку "Категории документов", у меня аяксом выводятся категории, например 10 штук, рядом с каждой категорией у меня есть иконочка "Копировать"? так вот нажав на копировать у меня под всем списокм категорий должна появиться формочка с вводом имени новой категории и кнопочкой добавить. Первый клик срабатывает, категории выводятся, а вот при нажатии на КОПИРОВАТЬ not defined. Ну я уже не знаю, как еще более просто объяснить ситуацию....
Back to top
View user's profile Send private message Send e-mail
Ksnk
Участник форума



Joined: 24 Jun 2005
Posts: 459
Карма: 49
   поощрить/наказать

Location: СПб

PostPosted: Tue Dec 25, 2007 7:10 pm (спустя 4 дня 9 часов 12 минут; написано за 4 минуты 53 секунды)
   Post subject:
Reply with quote

Видите, ли, то, что Вы пишете в HTML
Code (html): скопировать код в буфер обмена
<input (december.com/html/4/element/input.html) type="text" name="categ[1]" id="categ[1]"> (december.com/html/4/element/.html)
означает для JavaScript всего лишь то, что Вы завели элемент с именем "categ[1]". Не более и не менее. Тот факт, что при передаче POST'ом в PHP это добро превращается в массив PHP это фича самого PHP и никак не связана с окружающей JavaScript реальностью...
Можно попробовать посылать как есть... используя пересылку самой формы, а не отдельных элементов. Ну, или мрачно и цинично регулярками проверять коллецию forms[MyForm] на наличие "характерных" имен...
Back to top
View user's profile Send private message Send e-mail
Arcanum
Заглянувший



Joined: 24 Jun 2007
Posts: 10
Карма: 0
   поощрить/наказать

Location: Новосибирск

PostPosted: Sat Jan 19, 2008 11:47 am (спустя 24 дня 16 часов 37 минут; написано за 2 минуты 13 секунд)
   Post subject:
Reply with quote

Так что насчет моего второго вопроса? Он до сих пор актуален. Дмитрий, что Вы можете подсказать в этом плане? Т.е. как сделать так, чтобы если в аякс ответе пришли данные содержащие еще яваскрипт код для другого аякс запроса - этот запрос выполнился...?
Back to top
View user's profile Send private message Send e-mail
Vizlim
Участник форума



Joined: 24 Sep 2007
Posts: 102
Карма: 16
   поощрить/наказать

Location: Киев

PostPosted: Sat Jan 19, 2008 1:55 pm (спустя 2 часа 7 минут; написано за 4 минуты 49 секунд)
   Post subject:
Reply with quote

Arcanum,
Как то уж больно запутанно с вопросом №2, как я понял: в ответе Ajax'a приходит текст+JavaScript функция... Ну для начала нужно отделить текст от JavaScript функции... и если нужно что б эта функция выполнилась использовать к примеру:

s="function A() {alert(/hello/);}";
window.eval(s); // грубо говоря "инициализирует" текст на JavaScript'е
A(); //теперь можно вызывать функцию...
Back to top
View user's profile Send private message
Arcanum
Заглянувший



Joined: 24 Jun 2007
Posts: 10
Карма: 0
   поощрить/наказать

Location: Новосибирск

PostPosted: Mon Dec 21, 2009 6:23 am (спустя 1 год 11 месяцев 1 день 16 часов 28 минут; написано за 7 минут 21 секунду)
   Post subject:
Reply with quote

Подниму старую тему, т.к. спустя уже столько времени, после моего поста, думаю кто-то уже решил этот вопрос... Собственно все то, что и было - не работает. Повторюсь с вопросом:
1) Есть ссылка. Жму на нее. У меня выполняется ЯваСкрипт функция, которая делает аякс-запрос в бэкэнд, что-то там выполняет и возвращает HTML код, который, в свою очередь представлен просто ФОРМОЙ с несколькими полями. Т.е., чтобы вас не путать, считайте, что вернулась обычная форма с тремя полями input.

2) Вернувшаяся форма естественно имеет формат:
Code (html): скопировать код в буфер обмена
<form (december.com/html/4/element/form.html) method="post" enctype="multipart/form-data" id="bmk" onsubmit="return false"> (december.com/html/4/element/.html)
...
<input (december.com/html/4/element/input.html) type="submit" value="" onclick="saveNewBookmark(document.getElementById('bmk'));" /> (december.com/html/4/element/.html)
Так вот, как вы уже догадались, пользователь заполняет поля чистой формы, жмет СОХРАНИТЬ и данные должны лететь АЯКСом...но...нифига не летит...Как решить этот вопрос?


P.S. Да, почитав форум понял, что это какой-то косяк Фаерфокса (пробовал на вресии 3.5.6)... В том же Хроме, все отработало на ура.
Back to top
View user's profile Send private message Send e-mail
Willy
Guest





Карма: 388
   поощрить/наказать


PostPosted: Fri Apr 27, 2018 12:27 am (спустя 8 лет 4 месяца 5 дней 18 часов 3 минуты)
   Post subject: Передача нескольких input и отправка запроса из ответа :: JsHttpRequest :: JavaScript :: Форум dkLab и Denwer
Reply with quote

Fantastic post.Never knew this, regards for letting me know. my web site: tustin happy cats (campusview.net)
Back to top
sckameikin22
Заглянувший



Joined: 17 May 2018
Posts: 1
Карма: 0
   поощрить/наказать

Location: Санкт-Петербург

PostPosted: Thu May 17, 2018 1:05 pm (спустя 20 дней 12 часов 37 минут; написано за 13 секунд)
   Post subject:
Reply with quote

Да, есть у не свои преимущества.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
Post a reply
Username
Subject
Господа спамеры и оптимизаторы!

Вы можете даже и не пытаться вставлять в текст поста ссылки - они все равно автоматически удаляются (вернее, тэги <a> заменяются на тэги <u>).

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

Disable BBCode in this post
Disable Smilies in this post
    HTML is OFF
BBCode is ON
Smilies are ON
You cannot post new topics in this forum. You can reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML