Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Не передаются данные из JS в PHP - JavaScript
fenix_63  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 16
Пользователь №: 39610
На форуме: 2 года, 6 месяцев, 19 дней
Карма:




Всем привет. Народ, есть сайт: http://bodys.top/ При клике на кнопку "В корзину" срабатывает jQuery-метод:

// Добавление новой покупки в список пользователя
//.add-shop-card - класс для кнопки "В корзину"

$('.add-shop-card').add('.shop-t-delete').on('click', function () {


var th = $(this);
var dataShopId = parseInt(th.attr('data-shop'));//Берём HTML-атрибут data-shop, т.е. это номер (id) товара
var dataCount = parseInt(th.attr('data-count'));
//
var data = "p=2&shop_id=" + dataShopId + "&count=" + dataCount;//Пример строки: p=2&shop_id=82&count=1
ajaxUpdateBasketData(data, 'inc/shop.php');//тут вызывается php-скрипт добавления товара в корзину


});


Потом вызывается метод ajaxUpdateBasketData:
//Функция добавления товара в корзину

function ajaxUpdateBasketData(dataSend, file) {

$.ajax({
type: "GET", //Я думаю что используется GET - потому что база изначальна уже была готовая. Из базы выдёргивается только id товара и его
//количество


url: file, //файл inc/shop.php
data: dataSend //Пример строки данных: p=2&shop_id=82&count=1

}).done(function (data) {
existsUpdateData = 1;
if (data == 'new')
showAlert(1, 'Товар удачно добавлен в корзину');
if (data == 'update')
showAlert(1, 'Товар удачно обновлен в корзине');
if (data == 'delete')
showAlert(2, 'Товар удален из корзины');
});

}


Так вот, метод ajaxUpdateBasketData почему то не передаёт данные в php-файл shop.php, я из php никак данные выцепить не могу, помогите пожалуйста.

shop.php:
<?php

//Устанавливаем соединение с БД
include_once("../config.php");

echo "test ";
echo $_GET['shop_id'];//В этой переменной ничего нет ((

mysql_close($connecDB);

?>
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
redreem  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 4256
Пользователь №: 29002
На форуме: 5 лет, 4 месяца, 2 дня
Карма: 147




есть. в ответе все прекрасно приходит.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
fenix_63  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 16
Пользователь №: 39610
На форуме: 2 года, 6 месяцев, 19 дней
Карма:




Я если отдельно в браузере открываю bodys.top/inc/shop.php то у меня просто test на странице выводится, и всё. Напиши пожалуйста подробнее, как shop_id выцепить из аякса?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
redreem  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 4256
Пользователь №: 29002
На форуме: 5 лет, 4 месяца, 2 дня
Карма: 147




конечно если просто открывать по ссылке выше, то в GET ничего не будет.

добавь console.log

 $.ajax({
type: "GET", //Я думаю что используется GET - потому что база изначальна уже была готовая. Из базы выдёргивается только id товара и его
//количество


url: file, //файл inc/shop.php
data: dataSend //Пример строки данных: p=2&shop_id=82&count=1

}).done(function (data) {

console.log(data);

existsUpdateData = 1;
if (data == 'new')
showAlert(1, 'Товар удачно добавлен в корзину');
if (data == 'update')
showAlert(1, 'Товар удачно обновлен в корзине');
if (data == 'delete')
showAlert(2, 'Товар удален из корзины');
});


жми добавить в корзину и смотри консоль.
P.S. В хроме Ctrl+Shift+I, вкладка Console
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
fenix_63  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 16
Пользователь №: 39610
На форуме: 2 года, 6 месяцев, 19 дней
Карма:




Да, действительно данные обратно из php в аякс приходят, спасибо! Буду дальше доделывать эту корзину )
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
fenix_63  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 16
Пользователь №: 39610
На форуме: 2 года, 6 месяцев, 19 дней
Карма:




redreem слушай, а может ты знаешь как shop.php написать, чтобы он с корзиной правильно работал? До меня человек делал http://dev.thelandpage.ru/body/ А мне сказали сделать точную копию тут: http://bodys.top/

Доступов не осталось, сейчас вот даже и не знаю как shop.php правильно написать чтоб корзина также появлялась, отображала содержимое и т.д.
Просто если делать echo 'new' вылазиет только табличка что "товар успешно добавлен в корзину", и всё, а сама панель с корзиной не появляется ((.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
redreem  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 4256
Пользователь №: 29002
На форуме: 5 лет, 4 месяца, 2 дня
Карма: 147




Цитата
а может ты знаешь как shop.php написать, чтобы он с корзиной правильно работал?


в каком плане "знаешь"? естественно что там творится - не знаю, т.к. внутренности систем даже не видел.
за оплату сделать могу.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
fenix_63  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 16
Пользователь №: 39610
На форуме: 2 года, 6 месяцев, 19 дней
Карма:




Это вроде работает, корзина появляется, но теперь другая проблема появилась. Если пользователь жмёт кнопку "В корзину" - значению value элемента #form-buy-data присваивается название товара, и его количество. И потом если пользователь захочет добавить в корзину ещё какой-нибудь товар, и жмёт "В корзину" - то вместо того, чтобы значение нового товара "добавлялось" в #form-buy-data, оно меняется, т.е. просто меняется на новое, а это не есть гуд, т.к. при оформлении заказа форма будет брать этот атрибут value, а там будут не все товары, а только последний, может кто знает как это исправить? Вот код (точку останова ставим на 149 строке, там где var mss = data.split(';')):

var basketAllShop = 0;
var basketAllPrice = 0;
var existsUpdateData = 1;

var tlp = new TheLandPage();

$(document).ready(function () {
// Кешируем объект окна
$window = $(window);
$('section[data-type="background"]').each(function () {
var $bgobj = $(this); // Назначаем объект
$(window).scroll(function () {
// Прокручиваем фон со скоростью var.
// Значение yPos отрицательное, так как прокручивание осуществляется вверх!

var yPos = -($window.scrollTop() / $bgobj.data('speed'));
// Размещаем все вместе в конечной точке
var coords = '50% ' + yPos + 'px';
// Смещаем фон
$bgobj.css({backgroundPosition: coords});
});
});

//
// Shop buy
//

// Update basket after loading page

setInterval(updateBasket, 500);

// Add new shop in user list
$('.add-shop-card').add('.shop-t-delete').on('click', function () {
var th = $(this);
var dataShopId = parseInt(th.attr('data-shop'));
var dataCount = parseInt(th.attr('data-count'));
//
var data = "p=2&shop_id=" + dataShopId + "&count=" + dataCount;
ajaxUpdateBasketData(data, 'inc/shop.php');
});

// Delete shop out basket
$('body').on('click', '.shop-update-count', function () {
var th = $(this);
var dataShopId = parseInt(th.attr('data-shop'));
var dataCount = parseInt(th.attr('data-count'));
//
var data = "p=2&shop_id=" + dataShopId + "&count=" + dataCount;
ajaxUpdateBasketData(data, 'inc/shop.php');
});

// Show and hide full list of shops buy
$('.show-all-buy').on('click', function () {
var fullListShops = $('#shop-all-list');
//
$('.show-all-buy').removeClass('hidden');
$(this).addClass('hidden');
//
if (fullListShops.hasClass('hidden')) {
fullListShops.removeClass('animated fadeOutDown');
fullListShops.addClass('animated fadeInUp');
fullListShops.removeClass('hidden');
}
else {
fullListShops.removeClass('animated fadeInUp');
fullListShops.addClass('animated fadeOutDown');

setTimeout(function () {
fullListShops.addClass('hidden');
}, 500);
}
}
);

// Form send data
tlp.ajaxForm('#form1', 'send.php');
tlp.ajaxForm('#form2', 'send.php');
tlp.ajaxForm('#form3', 'send.php');
tlp.ajaxForm('#form6', 'send2.php');

});


$(window).scroll(function () {
//
// Change shop menu
//

var windowTop = $(window).scrollTop() + 80;
var headerMenuShop = $('#header-shop-menu');
var menuShop = $('#menu');
var blockRegion = $('#box-5-w').offset().top + $('#box-5-w').height();

var animShow = 'fadeInUpRubber';
var animHidden = 'slideOutDown';

if (menuShop.offset().top < windowTop) {
// If user not visible block of shop
if (blockRegion < windowTop) {
if (!headerMenuShop.hasClass('hidden')) {
// Animated
var menuItems = $('.menu-5-small');
menuItems.removeClass('animated ' + animShow);
menuItems.addClass('animated ' + animHidden);
setTimeout(function () {
headerMenuShop.addClass('hidden');
}, 500);
}
}

// If user visible block of shop
else {
if (headerMenuShop.hasClass('hidden')) {
headerMenuShop.removeClass('hidden');
// Animated
var menuItems = $('.menu-5-small');
menuItems.removeClass('animated ' + animHidden);
menuItems.addClass('animated ' + animShow);
}
}
}

// If user higher block of shop
else {
if (!headerMenuShop.hasClass('hidden')) {
// Animated
var menuItems = $('.menu-5-small');
menuItems.removeClass('animated ' + animShow);
menuItems.addClass('animated ' + animHidden);
setTimeout(function () {
headerMenuShop.addClass('hidden');
}, 500);
}
}
}
);


//
// Work with shop basket
//


function updateBasket() {
if (existsUpdateData == 1) {
var file = 'inc/shop.php';
var basketBlock = $('#shop-card-block');
var basketItemsCount = $('#basket-items-count');
var basketItemsPrice = $('#basket-items-price');
var formBuyData = $('#form-buy-data');
// Update counters
$.ajax({
type: "GET",
url: file,
data: "p=0"
}).done(function (data) {
var mss = data.split(';');
basketAllShop = mss[0];
basketAllPrice = mss[1];
// update elements
basketItemsCount.html(basketAllShop);
basketItemsPrice.html(basketAllPrice);
formBuyData.val(mss[2]);
updateBasketShowState();
});
// Update html in basket
$.ajax({
type: "GET",
url: file,
data: "p=1"
}).done(function (data) {
basketBlock.html(data);
});
existsUpdateData = 0;
}
}


function updateBasketShowState() {
var basket = $('#shop-basket');
// Update basket bottom state
if (basketAllShop > 0) {
basket.removeClass('hidden');
basket.removeClass('animated fadeOutDown');
basket.addClass('animated fadeInUp');
}
else {
basket.removeClass('animated fadeInUp');
basket.addClass('animated fadeOutDown');
setTimeout(function () {
basket.addClass('hidden')
}, 500);
}
}


function ajaxUpdateBasketData(dataSend, file) {
$.ajax({
type: "GET",
url: file,
data: dataSend
}).done(function (data) {
existsUpdateData = 1;
if (data == 'new')
showAlert(1, 'Товар удачно добавлен в корзину');
if (data == 'update')
showAlert(1, 'Товар удачно обновлен в корзине');
if (data == 'delete')
showAlert(2, 'Товар удален из корзины');
});
}

function showAlert(type, text) {
var obj = $('.alert-success');
if (type == 2) {
obj = $('.alert-fail');
}
obj.html(text);
obj.removeClass('hidden');
obj.removeClass('animated fadeOut');
obj.addClass('animated fadeIn');
setTimeout(function () {
obj.removeClass('animated fadeIn');
obj.addClass('animated fadeOut');
setTimeout(function () {
obj.addClass('hidden');
}, 1000);
}, 2000);
}

/*
* Создаем элементы HTML5 для IE
*/


document.createElement("article");
document.createElement("section");


А вот файл shop.php и basket.class.php, который отдаёт js-скрипту обработанные данные:

shop.php:

<?php

include_once "../inc/basket.class.php";

Basket::process();


basket.class.php:

<?php

class
Basket {

static $error = 0;
static $response = '';
static $product = array();
static $process = 0;//0 - вывод продукта, 1 - вывод корзины, 2 - добавление/удаление товара
static $count = 0;//0 - удаление продукта
static $do = 0;//0 - удаление продукта

static function process() {

include_once "../inc/config.php";
include_once "../inc/mysqli.class.php";

DB::connect(DBUSER, DBPASS, DBNAME, DBHOST,1);

if (mysqli_connect_errno()) {
echo 'ќшибка подключени¤: ' . mysqli_connect_errno();
die();
}

session_start ();

self::$process = (int)(isset($_GET['p']) ? $_GET['p'] : 0);

switch (self::$process) {
case -1:
unset($_SESSION['basket']);
default:
case 0:
self::get_product();
break;
case 1:
self::get_basket();
break;
case 2:
self::add_remove_product();
break;
}

self::complete();

}

static function get_basket() {

$template = '
<div class="shop-t">
<div class="shop-update-count shop-t-delete" data-shop="{product_id}" data-count="0">+</div>
<div class="shop-t-photo"><img src="{img_path}"/></div>
<div class="shop-t-name">{product_name}</div>
<div class="shop-t-price">{price} руб.</div>
<div class="shop-t-count">
<span class="shop-update-count shop-t-count-minus" data-shop="{product_id}" data-count="0">-</span>
<span class="shop-t-count-num">{count}</span>
<span class="shop-update-count shop-t-count-plus" data-shop="{product_id}" data-count="2">+</span>
</div>
</div>
'
;

$html = '';
if (isset($_SESSION['basket'])) {
foreach ($_SESSION['basket']['products'] as $id => $prod_arr) {

if ( $prod_arr['count'] < 1) {
continue;
}

$t = $template;

$t = str_replace('{product_id}', $prod_arr['id'], $t);
$t = str_replace('{product_name}', $prod_arr['name'], $t);
$t = str_replace('{price}', $prod_arr['price'] * $prod_arr['count'], $t);
$t = str_replace('{count}', $prod_arr['count'], $t);
$t = str_replace('{img_path}', $prod_arr['basket_img'], $t);

$html .= $t;

}
}


self::$response = $html;

}

static function get_product() {

if (isset($_SESSION['basket'])) {

//print_r($_SESSION['basket']['products']);
$sum = 0;
$cnt = 0;
foreach ( $_SESSION['basket']['products'] as $id => $prod_arr ) {
if ($prod_arr['count'] < 1) {
continue;
}
//print_r($prod_arr);
$sum = $sum + $prod_arr['price'] * $prod_arr['count'];
$cnt++;
}

if ($sum == 0) {
self::$response = '0;0;';
} else {
self::$product = $_SESSION['basket']['products'][ $_SESSION['basket']['last_id'] ];
//self::$response = count($_SESSION['basket']['products']) . ';' . $sum . ';' . self::$product['name'] . '(' . $_SESSION['basket']['products'][self::$product['id']]['count'] . ')';
self::$response = $cnt . ';' . $sum . ';' . self::$product['name'] . '(' . $_SESSION['basket']['products'][self::$product['id']]['count'] . ')';
}
}


}


static function complete() {
DB::close();

switch (self::$error) {
case 0:

switch (self::$process) {
case -1:
header('Location: /');
case 0:
break;
case 1:
break;
case 2:
if (!isset($_SESSION['basket'])) {
$_SESSION['basket'] = array('last_id', 'products');
}
$_SESSION['basket']['products'][self::$product['id']] = self::$product;
$_SESSION['basket']['last_id'] = self::$product['id'];
self::$response = self::$do;
break;
}

break;
case 1:
//в базе продукт не найден
break;
case 2:
//количество продукта == 0
break;
case 3:
//не верные параметры запроса
break;
}

echo self::$response;
exit;

}



static function add_remove_product() {

$product_id = (int)(isset($_GET['shop_id']) ? $_GET['shop_id'] : 0);
self::$count = (int)(isset($_GET['count']) ? $_GET['count'] : -1);

if ($product_id == 0 || self::$count == -1) {

self::$error = 3;

} else {


if ( isset($_SESSION['basket']['products'][$product_id]) ) {

if (self::$count == 1 || self::$count > $_SESSION['basket']['products'][$product_id]['count']) {
$dir = 1;
} elseif (self::$count < $_SESSION['basket']['products'][$product_id]['count']) {
$dir = -1;
} else {
$dir = 1;
}

if ($dir == 1) {
self::$do = 'update';
} else {
self::$do = 'delete';
}

$_SESSION['basket']['products'][$product_id]['count'] = $_SESSION['basket']['products'][$product_id]['count'] + $dir;
self::$product = $_SESSION['basket']['products'][$product_id];


if ($_SESSION['basket']['products'][$product_id]['count'] < 1) {
unset($_SESSION['basket']['products'][$product_id]);
}

}
else {

$sql = "
select * from products where id = "
. $product_id. "
"
;

$q = DB::query( $sql );

if (!($row = DB::get_row($q))) {
self::$error = 1;
exit;
}

if ($row['count'] < 1) {
self::$error = 2;
exit;
}

self::$product = $row;
if (strlen(self::$product['name']) > 41) {
self::$product['name'] = substr(self::$product['name'], 0, 40) . '..';
}
self::$do = 'new';

}

}

}


}
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
fenix_63  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 16
Пользователь №: 39610
На форуме: 2 года, 6 месяцев, 19 дней
Карма:




Как недавно выяснилось, это копия вот этого: http://dev.thelandpage.ru/body/ - там при добавлении нового товара в атрибут value значение добавляется, а не меняется.

Это сообщение отредактировал fenix_63 - 15.05.2016 - 17:56
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
redreem  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 4256
Пользователь №: 29002
На форуме: 5 лет, 4 месяца, 2 дня
Карма: 147




у тебя вся корзина лежит в сессии. забирай ее оттуда да и все.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
fenix_63  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 16
Пользователь №: 39610
На форуме: 2 года, 6 месяцев, 19 дней
Карма:




Это да, я сейчас смотрю как формируется ответ из backet.class.php в js-файл.
Окончательная ответный кусок кода вот он:

  static function get_product() {

if (isset($_SESSION['basket'])) {

//print_r($_SESSION['basket']['products']);
$sum = 0;
$cnt = 0;
foreach ( $_SESSION['basket']['products'] as $id => $prod_arr ) {
if ($prod_arr['count'] < 1) {
continue;
}
//print_r($prod_arr);
$sum = $sum + $prod_arr['price'] * $prod_arr['count'];
$cnt++;
}

if ($sum == 0) {
self::$response = '0;0;';
} else {
self::$product = $_SESSION['basket']['products'][ $_SESSION['basket']['last_id'] ];
//self::$response = count($_SESSION['basket']['products']) . ';' . $sum . ';' . self::$product['name'] . '(' . $_SESSION['basket']['products'][self::$product['id']]['count'] . ')';
self::$response = $cnt . ';' . $sum . ';' . self::$product['name'] . '(' . $_SESSION['basket']['products'][self::$product['id']]['count'] . ')';
}
}


}


Как мне именно добавлять, а не менять значение ответа? с переменной $response уже игрался - не помогло :(
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
redreem  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 4256
Пользователь №: 29002
На форуме: 5 лет, 4 месяца, 2 дня
Карма: 147




вся корзина целиком передается в методе get_basket, но там уже html передается.
а если просто данные нужны, например json - можешь сделать подобный метод и дергать его уже.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса