繁体   English   中英

看不到“+”号,将数据从 AJAX 传递到 PHP

[英]Can't see "+" sign, passing data from AJAX to PHP

我不知道如何解释这一点,所以我会尽力而为。 我在 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()(这是一个 ID=results 的 div)。

注意注释掉的部分。 当我将此数据传递给 actions.php 时,我会从该 div 中获取所有 HTML,但“+”号除外。 显然,在此页面上,您可以看到“+”号。 我可以将这些数据发送到 textarea 并看到“+”号。 我可以将它发送到另一个 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"

此外,为了简单起见,我已经删除了 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;
    }
  }

?>

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

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

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

如有必要,您还可以在 PHP 中进行 URL 解码(如果它没有自动为您完成)。

实际上 url 可能会被解析而你没有得到结果。 试试这个。

用 %2B 替换 +

查看此页面以了解您的其他符号。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM