[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: обмен данными с помощью AJAX
Invis1ble
Недавно начал разбираться с JS. Практически сразу пришел к jQuery. Меня интересует вот что: как я могу получить данные от php-скрипта, что-то не могу никак въехать... какой-то JSON... или это тут не причем?
Вот смысл задачи: у меня php-скрипт должен принять post-запрос от js, обработать его функцией и возвратить обработанные данные. Как передать запрос я разобрался, а вот с возвратом - нет...
jQuery.post('?page=edit', {q: 'convert', html: jQuery('div#topic-message').html()})

if (isset($_POST['html']))
$bb = BBTags::HTML2BB($_POST['html']);

Так вот, как мне получить эту самую $bb в js-скрипте?



Спустя 2 часа, 40 минут, 57 секунд (13.09.2010 - 08:02) Michael написал(а):
$.post(
'/ajaxtest.php',
{
type: "test-request",
param1: "param1",
param2: 2
},
onAjaxSuccess
);
function onAjaxSuccess(data)
{
// Здесь мы получаем данные, отправленные сервером
alert(data);
}

В php просто то что нужно, выводишь - echo $bb; Эти данные станут значением переменной data, в функции обработки ответа.
Очень удобно на php например обернуть свои данные в некий тег. Типа:
echo '<div>' . $bb . '</div>';

получим этот текст в data. А это как раз верная запись для создания jQuery объектов.
$d = $(data); // - будет твой div

- и так также если много данных.

Вообще советую почитать это

Спустя 56 минут, 37 секунд (13.09.2010 - 08:58) linker написал(а):
Так может сначала нужно разобраться с самим JS, а уж потом переходить на его фреймворки?

Спустя 1 час, 3 минуты, 11 секунд (13.09.2010 - 10:01) Slays написал(а):
да не обязательно, я тоже jquery освоил раньше языка user posted image

Пользуюсь другой конструкцией,
jQuery.ajax({
type: "POST",
url: "файл на сервере.php",
data: "param="+param+"&param2="+param2+"&param3="+param3,
success: function(answ){
здесь обрабатываем ответ от сервера, находится в переменной, указанной в параметре функции success, т.е. в answ
}
});

Спустя 6 часов, 52 минуты, 38 секунд (13.09.2010 - 16:54) Invis1ble написал(а):
Так а что, получается кроме вывода в поток нет других способов?

Спустя 26 минут, 5 секунд (13.09.2010 - 17:20) Invis1ble написал(а):
linker
не хочется париться с изучением аспектов кроссбраузерности. Я вообще php учу, а в сторону js меня попутно занесло. Как будет время, я js обязательно выучу...

Спустя 48 минут, 6 секунд (13.09.2010 - 18:08) Slays написал(а):
только выводом в поток

Спустя 33 минуты, 38 секунд (13.09.2010 - 18:42) Invis1ble написал(а):
блин, так и не понял, как получить данные:
echo '<div id="test">' . ($_POST['test'] * 2) . '</div>';

function onAjaxSuccess(){alert jQuery('div#test').html()};
jQuery.post('script.php', {test: '10'}, onAjaxSuccess);

В алерте выдает null.. Что я не так делаю?

Спустя 23 минуты, 56 секунд (13.09.2010 - 19:06) Slays написал(а):
$.post(
'script.php',
{
type: "test-request",
test: 10,
},
onAjaxSuccess
);
function onAjaxSuccess(data)
{
$('div#test').html(data);
}

Спустя 42 минуты, 38 секунд (13.09.2010 - 19:48) Invis1ble написал(а):
Че-то все равно ниче не получается.. Дело в том что у меня php-скрипт выдает в поток помимо дива еще разметку... Почему function onAjaxSuccess(){alert (jQuery('div#test').html())}; не катит?

Спустя 16 минут, 36 секунд (13.09.2010 - 20:05) Slays написал(а):
Такое не катит, потому что ты тут нигде не используешь возвращенный от сервера ответ, а просто хочешь вывести содержимое diva с id=test, который уже должен быть на странице. Ответ же возвращается в виде аргумента функции onAjaxSuccess, в частности onAjaxSuccess(data) содержит полученный ответ в переменной data, с который ты и должен работать.

Спустя 4 минуты, 36 секунд (13.09.2010 - 20:10) Invis1ble написал(а):
Slays
Цитата
$('div#test').html(data);

насколько я понимаю, данная конструкция добавляет код html, находящийся в data, в тег <div id="test"> ...
Цитата
Такое не катит, потому что ты тут нигде не используешь возвращенный от сервера ответ, а просто хочешь вывести содержимое diva с id=test, который уже должен быть на странице. Ответ же возвращается в виде аргумента функции onAjaxSuccess, в частности onAjaxSuccess(data) содержит полученный ответ в переменной data, с который ты и должен работать.

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

Спустя 5 минут, 33 секунды (13.09.2010 - 20:15) Slays написал(а):
если тебе алерт ответа надо, то так, как Michael и написал

$.post(
'script.php',
{
type: "test-request",
test: 10,
},
onAjaxSuccess
);
function onAjaxSuccess(data)
{
alert(data);
}


не пользуюсь такой конструкцией, но думаю суть от этого не меняется =)

Спустя 5 минут, 11 секунд (13.09.2010 - 20:20) Invis1ble написал(а):
Slays
так как Michael написал выдается весь html, генерируемый php-скриптом, а мне надо только содержимое <div id="test">

Спустя 31 минута, 18 секунд (13.09.2010 - 20:52) Slays написал(а):
дак блин )) серверный файл, к которому ты обращаешься не должен иметь никаких лишних html-конструкций, файл php

<?php
echo '<div id="test">' . ($_POST['test'] * 2) . '</div>';
?>


и все, если тебя надо только содержимое дива, то и смысла нет на сервер что-то помещать, ибо параметр который ты хочешь отправить, можно в той же функции на 2 умножить =)
Ajax применяется чтобы из базы что-то достать, иначе к серверу прибегать и не надо, например передал на сервер число id, нашел в базе соответствующий товар, вывел его в поток, забрал в ajax и вывел на экран.
Если тебе надо с серверного файла какой-то кусок определенный, то используется load, только с ним ты передать параметр на сервер не сможешь.

Спустя 9 минут, 10 секунд (13.09.2010 - 21:01) Invis1ble написал(а):
Slays
echo '<div id="test">' . ($_POST['test'] * 2) . '</div>';

это я для примера, на самом деле то что мне надо я написал в первом посте
if (isset($_POST['html']))
$bb = BBTags::HTML2BB($_POST['html']);

Спустя 7 минут, 22 секунды (13.09.2010 - 21:08) Basili4 написал(а):
Цитата (Invis1ble @ 13.09.2010 - 18:20)
не хочется париться с изучением аспектов кроссбраузерности. Я вообще php учу, а в сторону js меня попутно занесло.

JQuery весит 19 кб очень плохо если для того чтобы показать 1 окошко ты будешь таскать JQuery кстати пояле того как я разобрался с основами JS JQuery у меня прошло на раз два мне потребовался только список методов с кратким описанием. а если что не понято было про то как это использовать я просто лез в код, благо JQuery есть вариант не сжатый и с другими библиотеками тоже все проще

Спустя 12 минут, 25 секунд (13.09.2010 - 21:21) Invis1ble написал(а):
Basili4
естественно jQuery таскается не ради одной операции... Кроме того, мне важно понять сам принцип...

С учетом вышеизложенного "обновляю" первый пост и вопрос )) :
Вот смысл задачи: у меня php-скрипт должен принять post-запрос от js, обработать его функцией и возвратить обработанные данные. Как передать запрос я разобрался, а вот с возвратом - нет...
JS:
function onAjaxSuccess(data)
{
bb = ...?
}
jQuery.post('?page=edit', {q: 'convert', html: jQuery('div#topic-message').html()}, onAjaxSuccess);

php:
if (isset($_POST['html']))
$bb = BBTags::HTML2BB($_POST['html']);
echo '<div id="receiver">' . $bb . '</div>';

Что мне надо написать в js-функции, чтоб js-переменная bb приняла значение php-переменной $bb ?? С учетом того, что php-скрипт генерирует, помимо <div id="receiver">, еще разметку...

Спустя 52 минуты, 27 секунд (13.09.2010 - 22:13) Invis1ble написал(а):
наконец-то разобрался! И вся эта дискуссия была разведена всего лишь по-поводу одной строчки, которую к сожалению (и к удивлению) никто так и не написал:
function onAjaxSuccess(data)
bb = jQuery('<div id="receiver>' + data + '</div>').text();

Спустя 21 минута, 24 секунды (13.09.2010 - 22:34) Slays написал(а):
хех ) дак к возврату ответа это никакого отношения не имеет =) Вернулась то тебе в переменную data полная строка <div id="receiver">' . $bb . '</div> + в придачу и остальная html структура, если имелась, которые ты дополнительно загнал в div, а в последствии обработал, т.е. достал текст

в твоем случае bb = $('<div id="receiver><div id="receiver">' . $bb . '</div></div>').text(); из которого ты потом $bb достаешь.

тоже самое решается без этой лишней операции ))

if (isset($_POST['html']))
$bb = BBTags::HTML2BB($_POST['html']);
echo $bb;


function onAjaxSuccess(data)
bb = data;

Спустя 9 часов, 10 минут, 52 секунды (14.09.2010 - 07:45) Michael написал(а):
Цитата (Invis1ble @ 13.09.2010 - 21:13)
наконец-то разобрался! И вся эта дискуссия была разведена всего лишь по-поводу одной строчки, которую к сожалению (и к удивлению) никто так и не написал:
function onAjaxSuccess(data)
  bb = jQuery('<div id="receiver>' + data + '</div>').text();

Это явно что то странное. Если (как я советовал раньше) твой вывод обернут в какой то тег-родитель, то все твои действия по разбору будут:
function onAjaxSuccess(data)
var bb = jQuery(data).find('#receiver').text();

А на вход тебе может поступить например такое:
<div>
<ul>
<li>
111
<li>222
</ul>
<div
id="receiver">
dddddddddddddddddddd
</div>
<p>

hjdhfjsdhfjkshdjf
</p>
</div>

Спустя 15 часов, 30 минут, 50 секунд (14.09.2010 - 23:16) Invis1ble написал(а):
Michael
я уже переписал все так, что мне не требуется вообще выполнять такой post-запрос. Но в любом случае спасибо за совет, попозже попробую. Чесно говоря я тоже не совсем понимаю, как у меня это работало
function onAjaxSuccess(data)
bb = jQuery('<div id="receiver">' + data + '</div>').text();


_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.