Передать строку из php в функцию js

Невозможно передать строку с 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, но фактический вывод либо сообщает синтаксическую ошибку, либо отображает строку кода.

echo $respMsg;
RiggsFolly 30.01.2019 14:42

Является ли фигурная скобка в первом символе этой строки опечаткой в ​​вашем вопросе? Так как это вызовет синтаксическую ошибку JS. {document.getElementById("available").value = available;

David Smith 30.01.2019 14:42
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
98
2

Ответы 2

Во-первых, вам нужно использовать функцию в 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.

Minty 30.01.2019 19:16

У вас есть пример, чтобы показать мне, как работает вся функция cart.php? Вам нужно return $respMsg в эту функцию, и напечатать ее в JS функция должна быть строковой переменной.

Kreyco 01.02.2019 17:10

<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>

Minty 02.02.2019 22:00

Файл cart.php работает. На данный момент, как и выше, я использую SESSION для хранения ответа от cart.php. И скрытый <p> имеет скрипт js для отображения ответа в msgbox. Однако я предпочитаю отображать ответ через Ajax сразу после успешной отправки данных о продукте add_to_cart в cart.php.

Minty 02.02.2019 22:24

Если вы хотите напечатать свой ответ, вы не можете сказать alert("<?php echo $respMsg; ?>");

Что вам нужно сделать, так это получить данные в обратном вызове и предупредить об этих данных.

success: function(data){
            alert(data);
            location.reload();
},

Другие вопросы по теме