Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 28.05.2015
Сообщений: 14

И еще раз о $.post

10.06.2015, 21:25. Показов 589. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решил в очередной раз усложнить себе жизнь, "упростив" управление своей БД...
Очень прошу на пальцах объяснить два вопроса...

1) Даю обработчику знать, что хочу редактировать визитную карточку и запрашиваю список имеющихся в БД контактов...
JavaScript
1
2
3
4
5
6
7
8
9
10
11
<script type="text/javascript">
 
$(document).ready(function() {
$( 'a[name="edit"]' ).click(function() {
            var fields = $("#phonebook").serializeArray(); 
                    $.post('phonebook_obrab.php?default='+'edit', fields , function(data) {
                    $("#searchresults").html(data);
                    });
        });
</script>
<a  name="edit" class="knopka"> Редактировать контакт</a>
в обработчике:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
switch ($_GET['default']) {
case edit:
$table='<table border="1">';
 
$query="SELECT uid, surname, name, sec_name, position FROM phonebook LIMIT 3";
echo $query;
$res=mysql_query($query) or die ('Ошибка БД'.mysql_error());
 
    while ($row=mysql_fetch_assoc($res)){
        $table.='<tr>';
        $table.='<td>'.$row['surname'].'</td>';
        $table.='<td>'.$row['name'].'</td>';
        $table.='<td>'.$row['sec_name'].'</td>';
        $table.='<td>'.$row['position'].'</td>';
        $table.='<td><a name="edit_'.$row['uid'].'" class="knopka"> Редактировать контакт</a></td>';
        $table.='</tr>';
    }
$table.='</table>';
echo $table;
 
break;  
}
Список получил, кнопки нарисовались... но! они не работают из основного php файла, приходится прописывать в обработчик... а хотелось бы конечно в одном файле js иметь... где засада?
JavaScript
1
2
3
4
5
6
7
8
9
10
11
<script>
$(document).ready(function() { 
 
  $( 'a[name^="edit_"]' ).click(function(e) {
                var name_click =   e.target.name;
                    $.post('phonebook_obrab.php?default='+'edit_card', {uid:name_click}, function(data) {
                    $("#searchresults").html(data);
                    });
        });
        }); 
</script>
из этого всего вырисовывается следующий вопрос... вот тут на уровне понимания засада...
обратная функция.. $("#searchresults").html(data);
сюда рисуется табличка, выводятся все print_r и т.д.
Но! в обработчике я получаю запрос из БД..
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
case 'edit_card':
 
$uid_need=str_replace("edit_", "", $_POST['uid']); // здесь нужно будет править - понимаю, что колхоз
 
$query="SELECT * FROM phonebook WHERE uid=".$uid_need."";
//echo $query;
$res=mysql_query($query) or die ('Ошибка БД '.mysql_error());
$row=mysql_fetch_assoc($res); // получил массив со значениями
 
$f=json_encode($row); // на всякий...
//echo $f;
 
break;
так вот... как мне эту переменную загнать обратно в основной файл?
я понимаю, что data может возвращаться в json..
но как разделить два потока?
чтобы и табличка рисовалась html и массив с данными возвращался?

грубо говоря...
JavaScript
1
2
3
4
5
6
7
8
9
10
<script>
$(document).ready(function() {
$( 'a[name="edit"]' ).click(function() {
            var fields = $("#phonebook").serializeArray(); 
                    $.post('обработчик', мои_исходящие_данные , function(data) {
                    1) в определенный див выполняется php/html код - $("#searchresults").html(data);
                        2) var myData = data...?
                    });
        });
</script>
Сорри за сумбур, но запутался вконец...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.06.2015, 21:25
Ответы с готовыми решениями:

Ввести строку символов. Если символ в данной строке встречается один раз, в конце строки добавлять ещё раз его
Ввести строку символов. Если символ в данной строке встречается один раз, в конце строки добавлять ещё раз этот символ. Pезультат вывести...

Если символ в данной строке встречается один раз, в конце строки добавлять ещё раз этот символ
Помогите с задачей на C# Ввести строку символов. Если символ в данной строке встречается один раз, в конце строки добавлять ещё раз этот...

Еще раз об ui
Недавно была тема где это затрагивалось. Но я считаю это достойно отдельной темы, так как окончательного ответа не получил и в гугле найти...

8
312 / 106 / 69
Регистрация: 18.04.2015
Сообщений: 346
10.06.2015, 22:32
Я так понял с сервера вернулась таблица но кнопки в ней не работают?
0
0 / 0 / 1
Регистрация: 28.05.2015
Сообщений: 14
10.06.2015, 22:47  [ТС]
Armi, В первом случае да.. стили применились, но обработчик не срабатывает...
поэтому и пришлось прописать js код в файл-обработчик, тогда работает... в общем уверен, что каша..
0
312 / 106 / 69
Регистрация: 18.04.2015
Сообщений: 346
10.06.2015, 22:56
Нужно назначать на элементы обработчик от родителя которые добавляются после загрузки страницы
JavaScript
1
2
3
$('#searchresults').on("click", ".knopka", function(){
 
});
1
0 / 0 / 1
Регистрация: 28.05.2015
Сообщений: 14
10.06.2015, 23:22  [ТС]
Armi, браво! все оказалось логично...
огромное спасибо.

уверен, что и со второй частью так же просто..
JavaScript
1
2
3
4
5
6
7
8
9
$('#searchresults').on("click", ".knopka", function(e){
                var name_click =   e.target.name;
                $.post('phonebook_obrab.php?default='+'edit_card', {uid:name_click}, function(data) {
                        $("#searchresults").html(data);
                    var myData = JSON.parse(data);
                    });
 
            $("#test2").append('<pre>'+print_r(myData)+'</pre>'); /*польз функция*/
            });
консоль пишет, что myData undefined... брр - ну где-то рядом я.. но...
в обработчике..
PHP
1
2
3
4
5
6
7
8
9
10
echo 'Любой текст или html код'; // отображает
$uid_need=str_replace("edit_", "", $_POST['uid']);
$query="SELECT * FROM phonebook WHERE uid=".$uid_need."";
 
$res=mysql_query($query) or die ('Ошибка БД'.mysql_error());
$data=mysql_fetch_assoc($res);
json_encode($data);
// если пишу echo, то логично, что он выводит на экран... сам массив в json формате...
 
break;
...
0
312 / 106 / 69
Регистрация: 18.04.2015
Сообщений: 346
11.06.2015, 00:21
попробуйте низкоуровневый запрос

Добавлено через 36 минут
JavaScript
1
2
3
4
5
6
7
8
9
$.ajax({
  type: "POST",
  url: "phonebook_obrab.php",
  data: fields,
  dataType:"json",
  success: function(data){
   console.log(data);
  }
});
0
0 / 0 / 1
Регистрация: 28.05.2015
Сообщений: 14
11.06.2015, 13:04  [ТС]
Armi, спасибо... пробовал уже и не раз.. да собственно и продолжаю.
если оставить dataType:"json", то вообще кнопка перестает срабатывать...
если ее убрать, то выдает результат в лог..
Любой текст или html код
{"uid":"1","name":"\u0414\u043c\u0438\u0 442\u0440\u0438\u0439"}

собственно тоже самое было и $.post...
а дальше то как разделить эти два потока?
$("#searchresults").html(data);он мне все из лога и печатает...

var myData = JSON.parse(data);
ругается на unexpected token..

объясните, пожалуйста, кто-нибудь на пальцах.. мне не нужен готовый код, а понять принцип... не Попову же писать))

Добавлено через 2 часа 10 минут
В общем взорвав мозг и себе и поисковикам... получилось следующее:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<script type="text/javascript">
 
$(document).ready(function() { 
                   $('#searchresults').on("click", ".knopka", function(e){ 
           var name_click =   e.target.name;
               $('#test').append(name_click); 
                $.ajax({
                    type: "POST",
                    url: "obrab.php",
                    dataType: 'json',
                    data: {
                        uid: name_click,
                        edit:"yes"
            },
                    success: function(data, textStatus) {
                        $('input[name=surname]').val(data.surname);
                        $('#test').append(textStatus);
                        $('#test').append(data.surname);
                    }
                });
            });
}); 
</script>
написал "чистый" обработчик..
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
require_once('admin/config.php');
if($_POST['edit']=="yes"){
$uid = $_POST['uid'];
$uid=str_replace("edit_","",$_POST['uid']);
$query="SELECT uid, surname from phonebook where uid = '$uid'";
$result = mysql_query($query) or die ('Ошибка БД'.mysql_error());
$row = mysql_fetch_assoc($result);
echo json_encode($row);
} else {
exit;   
}
 
?>
Все работает, правда как-то медленно..
Но мой вопрос так и остался открытым...
любое echo $uid приводит к тому, что скрипт перестает работать...

логику я вроде бы понял, что мы задаем формат возвращаемых данных как json и вполне логично, что никакие тэги и php команды не срабатывают..

теперь получается следующая ситуация:
если не указывать json, то выводится чистый html
если указать json, то возвращается массив с искомыми данными.

внимание вопрос
а можно это как-то объединить?

Добавлено через 39 минут
Японский городовой...
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
$table='<table border="1" align="center">';
    $table.='<tr>';
        $table.='<td>1</td>';
        $table.='<td>2</td>';
        $table.='</tr>';
    $table.='</table>';
    
$table=addslashes($table);
$table=preg_replace('#[\n\r]+#', "\\n", $table);    
 
$row = mysql_fetch_assoc($result);
$row['html']=$table; 
echo json_encode($row);
и тогда можно обращаться в js
$('#div2').append(data.html);

это сильный колхоз?
другого способа пока не нашел...
0
312 / 106 / 69
Регистрация: 18.04.2015
Сообщений: 346
11.06.2015, 21:03
Цитата Сообщение от dkweb Посмотреть сообщение
var name_click = * e.target.name;
Глядя на эту строчку я понял что не успеваю за ходом ваших мыслей.
Я уже не пойму что вы хотите отправить на сервер, а что получить и какой весь в этом смысл.
Я так и не увидел ваш html код и до конца не понял суть всей задачи, так как при описании вы скачете галопом, вам оно понятно, а я вижу ваш код первый раз. Давайте ещё раз с самого начала но подробнее а то после слов
Цитата Сообщение от dkweb Посмотреть сообщение
хочу редактировать визитную карточку
начинается провал. Визитные карточки несколько их или одна на странице и т.д. ....
1
0 / 0 / 1
Регистрация: 28.05.2015
Сообщений: 14
11.06.2015, 22:24  [ТС]
Armi, спасибо за готовность помочь! переход на низкоуровневые запросы дал свои плоды и сегодня очень неплохо продвинулся. Хотя и уверен, что изобретаю очередной велосипед... но, как говорится, зато вроде бы свой...
я с вашего разрешения завтра выложу все свои изыскания, дописываю два блока - они работающие на 99%, но уж больно нагроможденные получились - уверен, что можно значительно упростить.
С утра гляну свежим взглядом все перепишу-) и тогда все будет последовательно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.06.2015, 22:24
Помогаю со студенческими работами здесь

еще раз об Id
Ситуация в следующем, единственный существоваший id пользователя погиб вместе с жестким диском. Все это мне досталось в наследство, есть...

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

Ещё раз о консоли
Никак не могу понять, в джаве А) можно ли выводить в консоль символы методом прямой записи в видеобуфер? В) рисовать в консоли? ...

и еще раз тИЦ
Возможно ли как-нибудь приблизительно рассчитать сколько можно получить пунктов тИЦ с конкретного сайта. Например у меня есть сайт с тИЦ...

Ещё раз о скриншотах
Несколько дней назад форумчанен ПраПрапорщик поднимал эту тему, но закончилась она как-то не интересно. А тема, в принципе, очень...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru