#javascript #php #ajax #wordpress #woocommerce
#javascript #php #ajax #wordpress #woocommerce
Вопрос:
Прошло совсем немного времени с тех пор, как я начал разрабатывать в woocommerce. Возможно, я не знаю ограничений woocommerce, поэтому потерпите, когда я объясню свою проблему.
Я хочу создать средство настройки продукта. Для товаров (мебели), которые доступны только по запросу. Итак, это интерфейс, который я сделал. https://skmfurniture.com.au/KAALIKA/product/blow-me-away /
Я создал продукт, который меняет цвет с помощью SVG (поскольку его вариация имела более 2 тысяч цветов, создания изображений было недостаточно). В нем указана цена, тип кожи / товара, основной цвет, цвет акцента, размер, цена матраса и цена гарантии.
ПРОБЛЕМА: Вы можете запустить консоль и посмотреть переменную javascript, которую я успешно зарегистрировал. Я изменил переменную javascript на переменную PHP с помощью ajax, а затем попытался вставить ее в корзину. Поскольку все это было сделано в модальном режиме, на странице с одним товаром в woocommerce отображается сообщение «Пожалуйста, выберите вариант продукта», когда я отправляю значения.
Это используемый код ajax:
// adding to cart
$('#addToCart a').click(function(e){
$.ajax({
type: "POST",
data: {
chase: chase,
item : item,
price: price,
size: size,
mainHex: mainHex,
accentHex: accentHex,
mattress: mattress,
warranty: warranty,
action: 'your_ajax_function'
},
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
dataType: "text",
success: function (msg) {
console.log("Chase", chase);
console.log("Price", price);
console.log("Item", item);
console.log("Size", size);
console.log("Main Color", mainHex);
console.log("Accent Color", accentHex);
console.log("Matt", mattress);
console.log("Warr", warranty);
},
error: function (errormessage) {
console.log( "ERROR in ajazx" );
}
});
window.location.replace("https://skmfurniture.com.au/KAALIKA/cart/");
});
Вот как function.php файл выглядит следующим образом:
// getting values from ajax into php
add_action('wp_ajax_nopriv_your_ajax_function','your_ajax_function'); // Ajax Function should be hooked like this for unauthenticated users
add_action('wp_ajax_your_ajax_function','your_ajax_function');
function your_ajax_function(){
$price = $_POST['price'];
$chase = $_POST['chase'];
$item = $_POST['item'];
$price = $_POST['price'];
$size = $_POST['size'];
$mainHex = $_POST['mainHex'];
$accentHex = $_POST['accentHex'];
$mattress = $_POST['mattress'];
$warranty = $_POST['warranty'];
echo $chase;
echo $item;
}
Я написал функции для размещения их в корзине, затем оформления заказа, а затем, наконец, для заказа товаров в серверной части, но не уверен, что я уже ошибаюсь в этих шагах. Я просто распечатываю, передаются ли переменные или нет, но уверен, почему я ничего не получаю.
Если бы вы могли просто посмотреть и направить меня в правильном направлении, я был бы очень признателен.
Ответ №1:
Проблема
Вы пытаетесь отобразить значения на сервере, которые вы отправляете с помощью ajax, но не видите никаких выходных данных.
Причина
В вашей функции успеха вы console.log(chase)
вместо msg
. msg
это параметр, который вы передаете в функцию успеха, поэтому это данные в области видимости.
// Неправильный путь!
success: function (msg) {
console.log("Chase", chase);
},
Пример
Это должно показать вам строку, возвращенную с сервера.
// Правильный путь!
success: function (msg) {
console.log("Chase", msg);
}
Совет профессионала
Если вы не видите значение в DOM, как ожидалось, всегда проверяйте вкладку Сеть в Chrome Dev Tools. Вы можете нажать Сеть -> Ответ, чтобы увидеть ответ от сервера. По крайней мере, тогда вы будете знать, возвращаются ли данные или нет. Это поможет вам отследить проблему.
Комментарии:
1. спасибо за профессиональный совет .. я получил весь html-документ в качестве ответа .. есть ли способ, которым я мог бы просто получить нужные переменные?
2. Сделайте две вещи, можете ли вы удалить вторую
echo
, чтобы вы возвращали только «погоню». Кроме того, внутри функции PHP вы можетеmail("youremail", "test", chase);
проверить, действительно ли функция запущена и получено значение «chase».3. Кроме того, для ясности, похоже, что это работает. Вы отправляете сообщение на SELF, поскольку не указываете URL-адрес. Таким образом, технически вы увидите HTML-страницу в ответе. Вам просто нужно убедиться, что вы получаете доступ к значениям, на которые рассчитываете. Используйте сообщение msg в журнале консоли и убедитесь, что вы их видите. Кроме того, вы должны возвращать данные с сервера, вы не можете просто назначить их переменным. Лучшим вариантом было бы создать JSON, чтобы msg представлял собой объект JSON, содержащий все ваши пары ключ-значение, возвращаемые с сервера.
4. Я добавил
ajaxurl = '<?php echo admin_url( 'admin-ajax.php' ) ?>'
в качестве URL-адреса и, просматривая вкладку «Сеть», я могу видеть ответ по мере необходимости. Большое вам спасибо за вашу помощь.5. Потрясающая и отличная работа. Если вы поняли, пожалуйста, выберите один из ответов. И добро пожаловать!