Помогите с аяксом

12
EO
На сайте с 10.05.2005
Offline
114
1371

Здравствуйте!

Просьба подсказать.

Не силен в аяксе, а нужна простая опция:

Есть запись на сайте, возле нее иконка,

при клике по иконке со ссылкой, например: site.ru/upd.php?id=1

нужно чтобы происходило обновление записи в базе с id=1

т.е. UPDATE table SET value=1 WHERE id=1 - это все понимаю.

А также запись на странице, возле которой кликнута иконка, должна становится зачеркнутой (ну здесь ява-скриптом делается).

При повторном клике, все наоборот - запись не зачеркнутая становится, в базе меняется value=0.

Но не знаю, как сделать это без перезагрузки страницы, нужно запрос сделать аяксом, в этом и не силен.

А так аякс к сайту уже подключен:

<script type="text/javascript" src="/js/jquery.min.js"></script>

Это же с помощью этой библиотеки будет осуществляться?

Бооольшой портал о мааалом бизнесе (http://www.bizguru.ru/) | Более 1000 бизнес-программ (http://1.44mb.ru) По выходным не работаю - не ищите меня в сети. В понедельник я обычно сам возвращаюсь :)
дани мапов
На сайте с 06.09.2012
Offline
204
#1

В двух словах это не объяснишь, почитайте как аякс работает.

Тут описывается подобная задача, только там лайк/дизлайк http://vk-book.ru/ajax-lajkidizlajki-dlya-zapisej/ , но принцип работы тот же.

Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
EO
На сайте с 10.05.2005
Offline
114
#2
дани мапов:
В двух словах это не объяснишь, почитайте как аякс работает.

Тут описывается подобная задача, только там лайк/дизлайк http://vk-book.ru/ajax-lajkidizlajki-dlya-zapisej/ , но принцип работы тот же.

Да, лайк-дизлайк как раз тоже самое получается, спасибо, буду изучать.

M
На сайте с 04.12.2013
Offline
223
#3

AJAX можно и без jQuery сделать, но это я так, к сведению.

Домены и скрипт для коротких ссылок: https://u75.ru/domains-for-shortcuts
Z0
На сайте с 03.09.2009
Offline
805
#4

$('#knopka').click(function(){

$.ajax({

url: '/файл php.php',

type: 'POST',

data: {'id': id который надо передать},

success: function(html){

$('#knopka').css('то что нужно с кнопкой сделать');

}

});

});

Примерно так на jquery 🍿

EO
На сайте с 10.05.2005
Offline
114
#5

Всем спасибо, все получилось быстрее, чем ожидал, примерно такая функция:

function NoteStrike(id, uid)

{

var note = 'note' + id;

var img = 'img' + id;

if (document.getElementById(note).className == "NoteStriked")

{

var striked = 0;

document.getElementById(note).className = "NoteUnstriked";

document.getElementById(img).src = '../images/unstriked.png';

} else {

var striked = 1;

document.getElementById(note).className = 'NoteStriked';

document.getElementById(img).src = '../images/striked.png';

}

$.ajax({

type: "POST",

url: "/cab/note_update.php",

data: {'action': 'strike', 'id': id, 'uid': uid, 'striked': striked},

dataType: "json",

});

}

Подскажите, если что коряво получилось.

дани мапов
На сайте с 06.09.2012
Offline
204
#6

Можно добавить проверку значения из note_update.php и если все нормально, тогда менять картинку.

Станислав
На сайте с 27.12.2009
Offline
252
#7
eugene_o:

Подскажите, если что коряво получилось.

Данный скрипт не знает добавился ли +1/-1 в базу данных, т.е. кнопочка то у вас работает, но если к примеру кто нибудь нажмет на кнопочку, а в UPDATE не будет выполнен, то после перезагрузки страницы у него опять же появиться 0.

Гляньте сюда http://api.jquery.com/jquery.ajax/ в частности на statusCode и уже на сервере отдавайте заголовок сервера 200 в случае успеха обновления таблицы вместе с каким то (like/dislike), в случае если не изменилось значение 403 к примеру. Ну и соответственно нужно изменить значение кнопочки при статусе в 200.


$.ajax({
//.........
statusCode: {
200: function(str) {
var like = (str === 'like' ? 1 : 0);
// тут уже меняем значение кнопочки
$('#like').text(like);
},
403: function() {
$('#like').after('Данные в базе не обновлены. И к кнопочке +1 не прибавили.')
}
}
})
Мы там, где рады нас видеть.
EO
На сайте с 10.05.2005
Offline
114
#8
Ms-Dred:
Данный скрипт не знает добавился ли +1/-1 в базу данных, т.е. кнопочка то у вас работает, но если к примеру кто нибудь нажмет на кнопочку, а в UPDATE не будет выполнен, то после перезагрузки страницы у него опять же появиться 0.

Гляньте сюда http://api.jquery.com/jquery.ajax/ в частности на statusCode и уже на сервере отдавайте заголовок сервера 200 в случае успеха обновления таблицы вместе с каким то (like/dislike), в случае если не изменилось значение 403 к примеру. Ну и соответственно нужно изменить значение кнопочки при статусе в 200.


$.ajax({
//.........
statusCode: {
200: function(str) {
var like = (str === 'like' ? 1 : 0);
// тут уже меняем значение кнопочки
$('#like').text(like);
},
403: function() {
$('#like').after('Данные в базе не обновлены. И к кнопочке +1 не прибавили.')
}
}
})

Спасибо, тоже хороший вариант, но можно проверять, как и в первой ссылке написано?

Скрипт выдает в случае записи в базу:

echo json_encode(array('result' => 'success'));

Затем:

success: function(data){

if(data.result == 'success'){

Меняем картинку на кнопке

}

Верно?

---------- Добавлено 26.08.2014 в 07:36 ----------

А лучше даже сразу получать значение переменной:

echo json_encode(array('strike' => $Strike));

И в зависимости от: data.strike менять кнопочку

---------- Добавлено 26.08.2014 в 07:44 ----------

Вот так получилось:

function NoteStrike(id, uid)
{
var note = 'note' + id;
var img = 'img' + id;

if (document.getElementById(note).className == "NoteStriked")
{
var striked = 0;
} else {
var striked = 1;
}

$.ajax({
type: "POST",
url: "/cab/note_update.php",
data: {'action': 'strike', 'id': id, 'uid': uid, 'striked': striked},
dataType: "json",

success: function(data){
if(data.strike == 1)
{
document.getElementById(note).className = 'NoteStriked';
document.getElementById(img).src = '../images/striked.png';
} else {
document.getElementById(note).className = "NoteUnstriked";
document.getElementById(img).src = '../images/unstriked.png';
}
}
});
}



---------- Добавлено 26.08.2014 в 07:44 ----------

Вроде все работает...

Станислав
На сайте с 27.12.2009
Offline
252
#9

Ну это не принципиально, мне просто с заголовками удобно работать, вот я и пишу так.

EO
На сайте с 10.05.2005
Offline
114
#10
Ms-Dred:
Ну это не принципиально, мне просто с заголовками удобно работать, вот я и пишу так.

Ок, понял, значит это решение тоже нормальное.

Спасибо всем, вроде довел до ума опцию :)

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий