[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: jQuery не работает
AlmazDelDiablo
Взялся я изучать jQuery все-таки, но, помоему, руки у меня окривели за месяц без кодинга. Есть такой код:
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
$(document).ready(function(){
alert('it`s work!');
}

Убедились, что jQuery работает, пошли дальше =)

Спустя 3 минуты, 4 секунды (25.03.2011 - 14:35) AlmazDelDiablo написал(а):
Да jQuery работает. И понял, почему не работал мой код (там перед этим была функция с ошибкой). Все, спасибо smile.gif пойду дальше ковыряться, писать буду сюда вопросы по 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, либо сделать редирект (это делаю через хедер в ПХП), если вход прошел успешно.

Вот мой нынешний код:
$(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 статус.

Спустя 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:
success: function(msg){
$('#box').html( '<div class="error">'+msg+'</div>' );
$('.error').animate({top: "+=65px", opacity: "1"}, "slow");
}
В msg выдает весь html-код страницы.

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)
Цитата (AlmazDelDiablo @ 25.03.2011 - 11:29)
$(document).ready(function(){
$('.copyright').click(function(){
.animate({right: "-=500"}, "fast")
return false;
});
});

А что должно происходить по щелчку? Я у тебя вижу сдвиг на 500 пикселей от отступа от правого края элемента с position: absolute. Как-то нелепо даже звучит. Что именно тебе нужно получить?

Забудьте об этом. Я эту функцию писал ради теста, работает ли jQuery.

Спустя 27 минут, 14 секунд (25.03.2011 - 18:05) fallow написал(а):
Вот >здесь<
мне хорошо обьяснил alex12060

Спустя 26 минут, 1 секунда (25.03.2011 - 18:31) AlmazDelDiablo написал(а):
Так, ну в принципе в общих чертах понятно, но... У меня результатом саццесса всегда, почему-то, получается весь ХТМЛ-код страницы.
Можно ли через 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. А у вас в нем стоит отображение шаблона
$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):
$.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, все правильно.
$.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 - запрос полностью завершен.

Спустя 6 минут, 15 секунд (25.03.2011 - 21:44) alex12060 написал(а):
польбому TEST.php и login.php никак между собой не связаны...

Да и незачем тебе эта проверка...

Вообще, вот тебе мой способ:


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 написал(а):
Боже мой, я идиот!!! Я обработчик криво написал smile.gif Все, заработало! Я осознал ajax!
Ребята, я вас обожаю smile.gif Чтобы я без вас делал?) Спасибо всем!


_____________
Блог | VK | GitHub | Twitch
Быстрый ответ:

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