无法看到“ +”号,正在将数据从AJAX传递到PHP

时间:2019-02-22 20:52:18

标签: php ajax

我不确定如何解释这一点,所以我会尽力而为。我在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"); }
        });
  }

如您所见,这是非常标准的。没有什么问题。此函数的目的是获取存储在$ results中的.html()(这是一个div,其中ID = results)。

请注意已注释掉的部分。当我将此数据传递到actions.php时,我从该div中获得了所有HTML,除了“ +”号。显然,在此页面上,您可以看到“ +”号。我可以将此数据发送到文本区域,并看到“ +”号。我可以将其发送到另一个div并看到“ +”号-但是当我将其发送到actions.php ...时,没有“ +”号。

注意下面的一行。我尝试过手动将变量htmldata更改为2 + 3的不同版本(为简单起见)。例如“ 2” +“ +” +“ 3”,“ 2 + 3”和“ 2 + 3”等-

每次成功功能中,输出始终为:“ 2 3 ”(无加号

我可以看到“ 2-3”,“ 2 * 3”等,但看不到加号。我有些沮丧,因为我觉得它要么太简单,我就忽略了它-要么我就疯了

来自结果div的html的真实版本看起来像(也包括格式-但如您所见,我需要那些加号)。这是用户之前调用updateDiceTracker()

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

此外,为简单起见,我在action.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 :(得分:1)

始终将URL编码值添加到查询字符串中,尤其是当它们可能包含各种“特殊字符”时:

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

这将替换可能在URL中具有特殊含义的特殊字符,以便将其视为字符串值的一部分。

如有必要,您也可以URL-decode in PHP(如果它不会自动为您完成)。

答案 1 :(得分:0)

实际上可能已解析了url,但您没有得到结果。试试看。

用%2B替换+

在此页面上查找其他符号。

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