Не вижу знака «+» при передаче данных из AJAX в PHP - PullRequest
0 голосов
/ 22 февраля 2019

Я не уверен, как это объяснить, поэтому я сделаю все возможное.У меня есть функция на странице JavaScript, которая выглядит следующим образом:

function updateDiceTracker(){
  //  var htmldata = $results.html();
  var htmldata = "2" + "\+" + "3";
    $.ajax({ url: 'actions.php',
            data: '&task=track.dice.roll&htmldata='+htmldata,
            type: 'post',
            success: function(output) {
              alert(output);
            },
            error: function(xhr, e){ message(e, "e"); }
        });
  }

Как вы можете видеть, это довольно стандартно.В этом нет ничего плохого.Цель этой функции - получить .html (), хранящийся в $ results (который является div, где ID = results).

Обратите внимание на закомментированную часть.Когда я передаю эти данные в actions.php, я получаю весь HTML из этого div, за исключением символов «+».Видимо, на этой странице вы можете увидеть знаки «+».Я могу отправить эти данные в текстовое поле и увидеть знаки «+».Я могу отправить его в другой div и увидеть знаки "+" - но когда я отправляю его в actions.php ... знаков "+" нет.

Обратите внимание на линию прямо под ней.Я попытался вручную изменить переменную htmldata на различные варианты 2 + 3 (для простоты).Такие как «2» + «+» + «3» и «2 + 3» и «2 + 3» и т. Д. -

Каждый раз в функции успеха ,вывод всегда: " 2 3 " ( без знака плюс )

Я вижу "2-3", "2 * 3" и т. д., но незнак плюс.Я немного озадачен, потому что чувствую, что это либо что-то настолько простое, что я пропускаю это, либо я схожу с ума

Реальная версия html из div результатов будет выглядеть примерно так (включаяформатирование - но, как вы видите, мне нужны эти плюсы).Это то, что кажется пользователю ПЕРЕД вызовом updateDiceTracker ()

"Pixii Stix attempts to attack the enemy with Dagger: (1d20+5)
Dice Roll: [Hit]: 13 (+5) = 18"

Также, для простоты, я вынул ВСЕ код на странице actions.php.Буквально, это то, на что это похоже сейчас:

<?php
  $task = isset($_POST['task']) ? $_POST['task'] : "";

  if ($task){
    switch($task){
      case "track.dice.roll":
        $htmldata = isset($_POST['htmldata']) ? $_POST['htmldata'] : "";
        echo $htmldata;
        break;
    }
  }

?>

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Всегда кодируемые значения URL добавляются в строку запроса, особенно если они могут содержать различные «специальные символы»:

data: '&task=track.dice.roll&htmldata=' + encodeURIComponent(htmldata)

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

При необходимости вы также можете URL-декодировать в PHP (если он не делает это автоматически).

0 голосов
/ 23 февраля 2019

На самом деле URL может быть проанализирован, и вы не получите результат.Попробуйте это.

Замените + на% 2B

Посмотрите на этой странице другие ваши символы.

https://www.w3schools.com/tags/ref_urlencode.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...