Невозможно передать строку с php-страницы в js-функцию другой страницы.
Это должно отображать сообщение после проверки того, существует ли добавляемый элемент в массиве или нет. Я пробовал либо добавлять кавычки, либо нет в предупреждении. 1. с кавычками в предупреждении javascript не преобразовывал заявление, а просто отображал его напрямую. 2. без кавычек в предупреждении Chrome говорит, что это ошибка, если без кавычек.
add_product.php (функция js):
function add_to_cart(){
jQuery('#modal_errors').html("");
var error='';
var available =$("#size option:selected").data("available");
var quantity = jQuery('#quantityInput').val();
{document.getElementById("available").value = available;
var data = jQuery('#add_product_form').serialize();
jQuery.ajax({
url : 'cart.php',
method : 'post',
data : data,
success: function(){
alert("<?php echo $respMsg; ?>");
location.reload();},
error : function(){alert("something wrong");}
});
return;
}
корзина.php:
if ($duplicate==false){
$respMsg = "The item is in cart now.";
} else {
$respMsg = "You have added the item twice.";
}
Я ожидаю, что всплывающее окно js msgbox покажет одно из сообщений php, но фактический вывод либо сообщает синтаксическую ошибку, либо отображает строку кода.
Является ли фигурная скобка в первом символе этой строки опечаткой в вашем вопросе? Так как это вызовет синтаксическую ошибку JS. {document.getElementById("available").value = available;



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Во-первых, вам нужно использовать функцию в cart.php, возвращающую результат $respMsg, а затем использовать ответ data из функции de jQuery.ajax, чтобы предупредить сообщение:
jQuery.ajax({
url : 'cart.php',
method : 'post',
data : data,
success: function(data){
alert("Message: " + data);
location.reload();
},
error : function(){
alert("something wrong");
}
});
Дополнительные сведения об ответе data и ответе success в руководство по jQuery.
Обновлено: Также вам нужно удалить фигурную скобку здесь:
{document.getElementById("available").value = available;
Это может вызвать синтаксическую ошибку JS.
В cart.php я добавил: echo $respMsg, попытался использовать данные в функции успеха, как вы предлагаете, но вывод показывает весь html-код в msgbox. Кроме того, фигурная скобка в порядке, поскольку это всего лишь часть функции js.
У вас есть пример, чтобы показать мне, как работает вся функция cart.php? Вам нужно return $respMsg в эту функцию, и напечатать ее в JS функция должна быть строковой переменной.
<p hidden><span id = "cartMsg" class = "text-alert"><?php if (isset($_SESSION["cartMsg"])) { echo "<script>alert('".$_SESSION[" cartMsg"]."');</script>" unset($_SESSION["cartMsg"]);} else{echo "";} ?></span></p>
Файл cart.php работает. На данный момент, как и выше, я использую SESSION для хранения ответа от cart.php. И скрытый <p> имеет скрипт js для отображения ответа в msgbox. Однако я предпочитаю отображать ответ через Ajax сразу после успешной отправки данных о продукте add_to_cart в cart.php.
Если вы хотите напечатать свой ответ, вы не можете сказать alert("<?php echo $respMsg; ?>");
Что вам нужно сделать, так это получить данные в обратном вызове и предупредить об этих данных.
success: function(data){
alert(data);
location.reload();
},
echo $respMsg;