jQuery AJAX请求 - 处理来自PHP页面

时间:2015-11-16 22:53:42

标签: javascript php jquery html ajax

我构建了一个简单的jQuery AJAX请求,该请求在数据库中查询所选模板,然后返回电子邮件主题和电子邮件正文并将其插入到html输入字段中。这一切都运作良好。

我刚刚注意到,当数据插入电子邮件正文时,它看起来像这样:

Dear Sally & John, thank you for your call today . . .

而不是:

Dear Sally & John, thank you for your call today . . .

此外,电子邮件正文中还有占位符,用户通常会手动更改:

Dear <<dear>>, 

这些出现在:

Dear &lt;&lt;dear&gt;&gt;

我正在使用PHP查询数据库并将数据作为JSON返回:

$templateDetails[] = array('templateBody' => $updatedTemplateBody);
echo json_encode($templateDetails);

以下是调用PHP请求的脚本:

$(document).ready(function() {
  $("#templateRef").change(function() {
    var templateRef = $("#templateRef").val();
    var contactID = '<?php  echo $contactID; ?>';
    $.post('getSMSTemplate.php', {
      contactID: contactID,
      templateID: templateRef
    }, function(data) {
      data = JSON.parse(data);
      if (data.error) {
        alert("error");
        $("#messageBody").html('');
        return; // stop executing this function any further
      } else {
        // console.log( data[0].templateBody );
        $("#messageBody").val(data[0].templateBody);
      }

    }).fail(function(xhr) {
      $("#messageBody").html('');
    });
  });
});

我可以调用一些函数来逃避这些字符吗?不确定这是用JavaScript还是PHP完成的,或者从哪里开始?

3 个答案:

答案 0 :(得分:0)

此部分:$("#messageBody").val(data[0].templateBody);可以改为$("#messageBody").html(data[0].templateBody);

答案 1 :(得分:0)

您可以使用htmlspecialchars_decode()在您的php中处理服务器端,在echo JSON退出之前生成响应时,您可以调用它。

<?php
$str = "<p>this -&gt; &quot;</p>\n";

echo htmlspecialchars_decode($str);

// note that here the quotes aren't converted
echo htmlspecialchars_decode($str, ENT_NOQUOTES);
?>

输出:

<p>this -> "</p>
<p>this -> &quot;</p>

(来自PHP手册) https://secure.php.net/manual/en/function.htmlspecialchars-decode.php

答案 2 :(得分:0)

那些“特殊字符”:它们实际上是HTML编码的文本。问题不在您在问题中发布的代码中。这是一个快速证明:

var data = "<< me & you >>"
$("#messageBody").val(data);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="messageBody" />

正如您所看到的,代码正确显示“特殊字符”,因此问题是由其他内容引起的,如果不了解有关项目的更多详细信息,我只能想到两种可能性。

1)它们会像数据库中那样保存,因此请检查确认。在这种情况下,您可以使用htmlspecialchars_decode()在将echo作为JSON之前对数据库数据进行解码,也可以使用$('<div/>').html(data[0].templateBody).text();在上面的jQuery中对其进行解码。这是一个测试:

var data = "&lt;&lt; me &amp; you &gt;&gt;"
data = $('<div/>').html(data).text();
$("#messageBody").val(data);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="messageBody" />

2)当您生成电子邮件时,文本会被编码。如果来自数据库的文本未经编码且您的messageBody正确显示,那么您需要检查从messageBody抓取文本以生成电子邮件的代码。如果您需要帮助,请在您的问题中发布该代码。