ajax.js:
$(document).ready(function(){
$('.copyright').click(function(){
.animate({right: "-=500"}, "fast")
return false;
});
});
Но он не пашет. Как я подозреваю — я как-то криво подключил библиотеку JQ. Вот код подключения:
<script type="text/javascript" src="./includes/ajax/jquery.js"></script>
<script type="text/javascript" src="./includes/ajax/ajax.js"></script>
Подскажите, где я натупил?)
По адресу «http://мой_сайт.ру/includes/ajax/jquery.js» в бразуере успешно открывается код JQ.
Спустя 3 минуты, 13 секунд (25.03.2011 - 14:32) inpost написал(а):
AlmazDelDiablo
Убедились, что jQuery работает, пошли дальше =)
$(document).ready(function(){
alert('it`s work!');
}
Убедились, что jQuery работает, пошли дальше =)
Спустя 3 минуты, 4 секунды (25.03.2011 - 14:35) AlmazDelDiablo написал(а):
Да jQuery работает. И понял, почему не работал мой код (там перед этим была функция с ошибкой). Все, спасибо пойду дальше ковыряться, писать буду сюда вопросы по JQ.
Спустя 13 минут, 36 секунд (25.03.2011 - 14:49) alex12060 написал(а):
$(document).ready(function(){
$('.copyright').click(function(){
$(this).animate({right: "-=500"}, "fast")
return false;
});
});
Если не поможет, то меняй на копирайт.
Спустя 19 минут, 48 секунд (25.03.2011 - 15:09) AlmazDelDiablo написал(а):
О, спасибо :)
Если можно, объясните подробно, для чего нужно поле data: в $.ajax? В тех мануалах где я смотрел — не понятно толком, зачем он нужен.
И еще. Как получить ответ от сервера? Он мне, по идее, долен прислать либо массив $error с ошибками, которые надо вывести в блок HTML'a, либо сделать редирект (это делаю через хедер в ПХП), если вход прошел успешно.
Вот мой нынешний код:
Если можно, объясните подробно, для чего нужно поле data: в $.ajax? В тех мануалах где я смотрел — не понятно толком, зачем он нужен.
И еще. Как получить ответ от сервера? Он мне, по идее, долен прислать либо массив $error с ошибками, которые надо вывести в блок HTML'a, либо сделать редирект (это делаю через хедер в ПХП), если вход прошел успешно.
Вот мой нынешний код:
$(document).ready(function(){
/*alert('it`s work!');*/
$('#loginput').click(function(){
$.ajax({
type: "POST",
url: "./index.php?act=login",
data: "",
success: function(html){
$('#box').html( '<div class="error">ТУТ ДОЛЖЕН БЫТЬ ЕРРОР</div>' );
}
});
return false;
});
});
Спустя 1 час, 18 минут, 56 секунд (25.03.2011 - 16:28) fallow написал(а):
data отправляет данные серверу, например data : {a: 100, b:200}
<?php
echo $_POST['a'] //выводит 100
echo $_POST['b'] //выводит 200
?>
Ответ можно получить success'ом передать - 1 парметром данные от сервера,2 статус.
<?php
echo $_POST['a'] //выводит 100
echo $_POST['b'] //выводит 200
?>
Ответ можно получить success'ом передать - 1 парметром данные от сервера,2 статус.
Спустя 9 минут, 39 секунд (25.03.2011 - 16:37) amazing написал(а):
AlmazDelDiablo, в данном примере надо отправлять строку типа "org=microsoft&address=kiev&phone=93733658" то есть обычный GET параметр. А для того чтобы отправить JSON, необзодимо конкретно указать тип передаваемых данных.
Спустя 36 минут, 39 секунд (25.03.2011 - 17:14) AlmazDelDiablo написал(а):
fallow, не совсем понял на счет success'a. Как в нем получить конкретную переменную из ПХП? Мне при таком success'e:
amazing, я, если честно, вообще не понял о чем вы и причем здесь ГЕТ и некий JSON.
Ах да. Вот ПХП-обработчик:
success: function(msg){В msg выдает весь html-код страницы.
$('#box').html( '<div class="error">'+msg+'</div>' );
$('.error').animate({top: "+=65px", opacity: "1"}, "slow");
}
amazing, я, если честно, вообще не понял о чем вы и причем здесь ГЕТ и некий JSON.
Ах да. Вот ПХП-обработчик:
if( isset( $_REQUEST['submit'] ) ) {
if( $_REQUEST['login'] != '' && $_REQUEST['pass'] != '' ) {
$login = $db->safe( trim( $_REQUEST['login'] ) );
$pass = $db->md5( trim( $_REQUEST['pass'] ) );
$query = $db->arr_query( "SELECT * FROM `wc3_web_players`
WHERE `nickname` = '$login' AND `password` = '$pass'"
);
if( $db->num_rows( $query ) == 1 ) {
$user = $query;
if( $_POST['remember'] == 'on' ) {
$hash = str_shuffle( $user['password'] ) . $user['id'] . date( 'H' );
setcookie( 'hash', $hash, time() + 365 * 86400, '/', $_SERVER['HTTP_HOST'] );
$db->query( "UPDATE `wc3_web_player` SET `hash` = '$hash'
WHERE `id` = '{$user['id']}'"
);
header( 'Location: ./index.php' );
die();
}
} else { $error[] = 'Логин или пароль введены не верно'; }
} else { $error[] = 'Заполните все поля!'; }
}
$smarty->assign( 'error', $error );
$smarty->display( 'login.html' );
Спустя 2 минуты, 50 секунд (25.03.2011 - 17:17) amazing написал(а):
AlmazDelDiablo, постораюсь обяснить проще. Если вставить data: "org=microsoft&address=kiev&phone=93733658", то в файле PHP можно принимать значения:
echo $_POST['org']; //выведет microsoft
echo $_POST['address']; //выведет kiev
echo $_POST['phone']; //выведет 93733658
Спустя 9 минут, 48 секунд (25.03.2011 - 17:27) Snus написал(а):
Цитата (AlmazDelDiablo @ 25.03.2011 - 11:29) |
$(document).ready(function(){ $('.copyright').click(function(){ .animate({right: "-=500"}, "fast") return false; }); }); |
А что должно происходить по щелчку? Я у тебя вижу сдвиг на 500 пикселей от отступа от правого края элемента с position: absolute. Как-то нелепо даже звучит. Что именно тебе нужно получить?
Спустя 10 минут, 44 секунды (25.03.2011 - 17:37) AlmazDelDiablo написал(а):
Цитата (Snus @ 25.03.2011 - 18:27) | ||
А что должно происходить по щелчку? Я у тебя вижу сдвиг на 500 пикселей от отступа от правого края элемента с position: absolute. Как-то нелепо даже звучит. Что именно тебе нужно получить? |
Забудьте об этом. Я эту функцию писал ради теста, работает ли jQuery.
Спустя 27 минут, 14 секунд (25.03.2011 - 18:05) fallow написал(а):
Вот >здесь<
мне хорошо обьяснил alex12060
мне хорошо обьяснил alex12060
Спустя 26 минут, 1 секунда (25.03.2011 - 18:31) AlmazDelDiablo написал(а):
Так, ну в принципе в общих чертах понятно, но... У меня результатом саццесса всегда, почему-то, получается весь ХТМЛ-код страницы.
Можно ли через ajax обратиться конкретно к какой-либо переменной, которая содержится в ПХП? Или к функции?
Если честно, то у меня такое ощущение, что в обработчике что-то не то... Но что именно — понять не могу. Вот вообще весь код, который у меня есть:
login.php:
engine.js:
login.html:
Результатом работы всего этого должно стать то, что при нажатии «Вход» откправляются ПОСТ-данные ПХП-обработчику и либо редиректит на главную страницу, при удачном входе, либо выдает окошко с ошибками, которые генерируются в список.
Можно ли через ajax обратиться конкретно к какой-либо переменной, которая содержится в ПХП? Или к функции?
Если честно, то у меня такое ощущение, что в обработчике что-то не то... Но что именно — понять не могу. Вот вообще весь код, который у меня есть:
login.php:
<?php
if( !defined('KEY') ) { exit; }
if( isset( $_REQUEST['submit'] ) ) {
if( $_REQUEST['login'] != '' && $_REQUEST['pass'] != '' ) {
$login = $db->safe( trim( $_REQUEST['login'] ) );
$pass = $db->md5( trim( $_REQUEST['pass'] ) );
$query = $db->arr_query( "SELECT * FROM `wc3_web_players`
WHERE `nickname` = '$login' AND `password` = '$pass'"
);
if( $db->num_rows( $query ) == 1 ) {
$user = $query;
if( $_POST['remember'] == 'on' ) {
$hash = str_shuffle( $user['password'] ) . $user['id'] . date( 'H' );
setcookie( 'hash', $hash, time() + 365 * 86400, '/', $_SERVER['HTTP_HOST'] );
$db->query( "UPDATE `wc3_web_player` SET `hash` = '$hash'
WHERE `id` = '{$user['id']}'"
);
header( 'Location: ./index.php' );
die();
}
} else { $error[] = 'Логин или пароль введены не верно'; }
} else { $error[] = 'Заполните все поля!'; }
}
$smarty->assign( 'error', $error );
$smarty->display( 'login.html' );
?>
engine.js:
$(document).ready(function(){
$('#login').submit(function(){
$.ajax({
type: "POST",
url: "./index.php?act=login",
data: "login="+$('#nickname').val()+"&pass="+$('#password').val()+"&submit="+$('#loginput').val(),
success: function(result){
$('#box').html( '<div class="error"><span>Ошибка</span><ul><li>'+result+'</li></ul></div>' );
$('.error').animate({top: "+=65px", opacity: "1"}, "slow");
}
});
return false;
});
});
login.html:
<div class="main" style="margin-left:-177px; margin-top: -84px; width: 355px; height: 168px;">
<table style="width: 308px;" align="center" cellspacing="5" cellpadding="5">
<tr>
<form id="login">
<td valign="top" width="70" align="right">
Логин:
</td>
<td valign="top" width="238" align="center">
<input id="nickname" type="text" class="input238" />
</td>
</tr>
<tr>
<td valign="top" width="70" align="right">
Пароль:
</td>
<td valign="top" width="238">
<div align="center"><input id="password" type="password" class="input238" /></div>
<div align="right" class="reg"><a href="./index.php?act=registration">Регистрация</a></div>
</td>
</tr>
<tr>
<td valign="top" colspan="2" width="308" align="center">
<input id="loginput" type="submit" value="Вход" />
</td>
</tr>
</form>
</table>
</div>
Результатом работы всего этого должно стать то, что при нажатии «Вход» откправляются ПОСТ-данные ПХП-обработчику и либо редиректит на главную страницу, при удачном входе, либо выдает окошко с ошибками, которые генерируются в список.
Спустя 51 минута, 13 секунд (25.03.2011 - 19:22) alex12060 написал(а):
Отправить надо в login.php
$(document).ready(function(){
$('#login').submit(function(){
$.ajax({
type: "POST",
url: "./index.php?act=login", // а тут index.php
data: "login="+$('#nickname').val()+"&pass="+$('#password').val()+"&submit="+$('#loginput').val(),
success: function(result){
$('#box').html( '<div class="error"><span>Ошибка</span><ul><li>'+result+'</li></ul></div>' );
$('.error').animate({top: "+=65px", opacity: "1"}, "slow");
}
});
return false;
});
});
Спустя 1 минута, 38 секунд (25.03.2011 - 19:24) amazing написал(а):
AlmazDelDiablo, потому что в переменную result в файле engine.js записывается все, что попадает в вывод в файле обработчике, в данном случае login.php. А у вас в нем стоит отображение шаблона
Если вместо него поставить
То в сацесс переменной result будет строка 'Данные сохранены'.
$smarty->display( 'login.html' );
Если вместо него поставить
echo 'Данные сохранены';
То в сацесс переменной result будет строка 'Данные сохранены'.
Спустя 12 минут, 50 секунд (25.03.2011 - 19:36) AlmazDelDiablo написал(а):
Мммм... кажется начинаю врубаться. Так как у меня login.php защищен с помощью exit(), то мне надо сделать для аякса функцию, которая позволяла бы направлять в login.php данные и отдавать ответ. Правильно?)
Спустя 26 минут, 40 секунд (25.03.2011 - 20:03) alex12060 написал(а):
Цитата |
Так как у меня login.php защищен с помощью exit() |
Объясни? зачем тебе такая защита?
Я обычно такую защиту ставлю на админские функции, конфиги и так далее.
Так что, смело открой его и все... и отсылай туда все данные...
Спустя 1 час, 8 минут, 58 секунд (25.03.2011 - 21:12) AlmazDelDiablo написал(а):
...Я дурак, кажется. У меня, как оказалось, вообще ничего на сервер не передается. Сделал вот такую штуку (срабатывает после обработки запроса к login,php):
И он мне выдает только мой PHPSESSID. То есть из форм в реквест ничего не передается.
alex12060, открыл. Но из-за причины (см. выше) — все равно не работает. Мозг уже не варит :(
$.ajax({
type: "POST",
url: "./includes/ajax/TEST.php",
success: function(msg){
$('#TEST').html( msg );
}
});
<?php
foreach( $_REQUEST as $key => $var ) {
$result .= $key .' = '. $var .'<br>';
}
echo $result;
?>
И он мне выдает только мой PHPSESSID. То есть из форм в реквест ничего не передается.
alex12060, открыл. Но из-за причины (см. выше) — все равно не работает. Мозг уже не варит :(
Спустя 10 минут, 16 секунд (25.03.2011 - 21:22) amazing написал(а):
AlmazDelDiablo, все правильно.
Тут ничего и не передается, нету атрибута "data: ......" , просто производится запрос.
$.ajax({
type: "POST",
url: "./includes/ajax/TEST.php",
success: function(msg){
$('#TEST').html( msg );
}
});
Тут ничего и не передается, нету атрибута "data: ......" , просто производится запрос.
Спустя 59 секунд (25.03.2011 - 21:23) alex12060 написал(а):
Ты забыл про data
Спустя 1 минута, 39 секунд (25.03.2011 - 21:25) AlmazDelDiablo написал(а):
Ну так этим запросом я просто проверяю состояние реквеста. Тут и ничего не надо вводить в дату. То есть у меня после запроса ПОСТ, который должен отправлять данные с логином и паролем, идет запрос с реквесту, пришло ли ему что-нибудь от предыдущего запроса.
Спустя 3 минуты, 56 секунд (25.03.2011 - 21:29) alex12060 написал(а):
что-то я тебя совсем не понимаю)
Спустя 1 минута, 18 секунд (25.03.2011 - 21:30) AlmazDelDiablo написал(а):
Ну, может, код поймешь?) Он лучше чем я разъясняет )
$(document).ready(function(){
$('#login').submit(function(){
$.ajax({
type: "POST",
url: "./includes/ajax/login.php",
data: "login="+$('#nickname').val()+"&pass="+$('#password').val()+"&submit="+$('#loginput').val(),
success: function(result){
if( result = '' ) { window.location.href=('./index.php'); } else { get_error( result ); }
}
});
$.ajax({
type: "POST",
url: "./includes/ajax/TEST.php",
success: function(msg){
$('#TEST').html( msg );
}
});
return false;
});
function get_error( msg ) {
$('#box').html( '<div class="error"><span>Ошибка</span><ul><li>'+msg+'</li></ul></div>' );
$('.error').animate({top: "+=65px", opacity: "1"}, "slow");
}
});
Спустя 7 минут, 25 секунд (25.03.2011 - 21:38) amazing написал(а):
AlmazDelDiablo, если срабатывает success в запросе с логином и паролем то точно пришло. А такая проверка ничего недаст, после отправки логина и пароля, скрипт отрабатывает и отдает html, в нем уж некак не остаеться информация от предыдущих запросов, новый запрос запускает его заного.
Все это проверяется событиями:
beforeSend - выполняеться до отправки запроса,
ajaxSend - непосредственно отправка запроса,
success - если запрос был успешным,
error - когда возникла ошибка,
complete - запрос полностью завершен.
Все это проверяется событиями:
beforeSend - выполняеться до отправки запроса,
ajaxSend - непосредственно отправка запроса,
success - если запрос был успешным,
error - когда возникла ошибка,
complete - запрос полностью завершен.
Спустя 6 минут, 15 секунд (25.03.2011 - 21:44) alex12060 написал(а):
польбому TEST.php и login.php никак между собой не связаны...
Да и незачем тебе эта проверка...
Вообще, вот тебе мой способ:
А допустим, тебе надо сказать о ошибке. Тогда, пишешь так:
error: Тут текст моей ошибки.
И при ошибке, он отрежет error:
и покажет тебе: Тут текст моей ошибки.
А все эти лишние проверки - лишние :)
Да и незачем тебе эта проверка...
Вообще, вот тебе мой способ:
function reload_items(c) {
if (c == "") {
c = 1;
}
$.ajax({
type: "POST",
url: "cmd.php",
data: "act=show&c="+c,
success: function(msg) {
if (msg.substr(0, 5) == 'error') { // если первые 5 символос равны error
alert(msg.substr(7)); // начинаем чтение с 7 символа, и выводим алерт.
return false; // завершаем процесс..
}
$("#ask-live").html(msg); // Выводим в туда при хорошей работе.
}
});
}
А допустим, тебе надо сказать о ошибке. Тогда, пишешь так:
error: Тут текст моей ошибки.
И при ошибке, он отрежет error:
и покажет тебе: Тут текст моей ошибки.
А все эти лишние проверки - лишние :)
Спустя 12 минут, 9 секунд (25.03.2011 - 21:56) AlmazDelDiablo написал(а):
Боже мой, я идиот!!! Я обработчик криво написал Все, заработало! Я осознал ajax!
Ребята, я вас обожаю Чтобы я без вас делал?) Спасибо всем!
Ребята, я вас обожаю Чтобы я без вас делал?) Спасибо всем!
_____________
Блог | VK | GitHub | Twitch