如何解码包含html元素的javascript变量值

Posted

技术标签:

【中文标题】如何解码包含html元素的javascript变量值【英文标题】:How to decode javascript variable value which contain html element 【发布时间】:2015-07-30 00:48:42 【问题描述】:

我有一个变量,其中包含一些文本和锚标记元素,例如

var success_msg = 'Please <a href="javascript:void(0);" id="popup-login" class="login" title="Login">login</a> to save your wishlist.';

现在我将这个变量传递给 ajax,并且这条消息在 ajax 成功时显示并弹出。

Ajax 代码:

var success_msg = 'Please <a href="javascript:void(0);" id="popup-login" class="login" title="Login">login</a>+ to save your wishlist.';
$.ajax(
    type: "POST",
    url: BASE_URL+"home/featherlightInfo",
    data: "success_msg="+success_msg,
    success: function (html) 
        $('#loading-div').hide(); // Hide Ajax loader
        $('#featherlightInfoPop').html(html);
        $.featherlight('#featherlightInfo');                    

        setTimeout(function()
            $(".featherlight-close").trigger("click");
        , 5000);

        $('#feathre').addClass('login-feathre');
    
);

一切都很完美,但在弹出的 HTML 中,我得到了这样的锚标记:

<a title="\&quot;Login\&quot;" class="\&quot;login\&quot;" id="\&quot;popup-login\&quot;" href="\&quot;javascript:void(0);\&quot;">login</a>`

奇怪的是,这段代码在我的本地服务器上运行良好。

我想要这个结果:Please &lt;a href="javascript:void(0);" id="popup-login" class="login" title="Login"&gt;login&lt;/a&gt; to save your wishlist.

那么如何获得合适的锚元素呢?

【问题讨论】:

听起来应该是固定的服务器端,而不是客户端 所以你正在向服务器传递一条消息,然后将它发送回客户端,然后发出警报??有什么意义? 为什么不直接从服务器端发送 html?它更干净,也不复杂。 【参考方案1】:

试试javascript的encodeURI函数:

var success_msg = 'Please <a href="javascript:void(0);" id="popup-login" class="login" title="Login">login</a>+ to save your wishlist.';
var encode_msg = encodeURI(success_msg);

For more read documentation.

您可以在 ajax 请求中传递标志消息,并在此基础上在服务器端创建此'Please &lt;a href="javascript:void(0);" id="popup-login" class="login" title="Login"&gt;login&lt;/a&gt;+ to save your wishlist.'; HTML 代码。这将是一个很好的做法。

【讨论】:

【参考方案2】:

根据jqueryajax:当你向服务器发送数据时,它会被转换成一个查询字符串,所以引号被转义了。

data 选项可以包含以下形式的查询字符串 key1=value1&key2=value2,或 key1: 'value1' 形式的对象, 键2:'值2'。如果使用后一种形式,则转换数据 在发送之前使用 jQuery.param() 进入查询字符串。这 可以通过将 processData 设置为 false 来规避处理。这 如果您希望将 XML 对象发送到 服务器;在这种情况下,将 contentType 选项从 application/x-www-form-urlencoded 为更合适的 MIME 类型。

【讨论】:

以上是关于如何解码包含html元素的javascript变量值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 模板中获取带有 javascript 变量的数组元素?

用javascript定义一个数组,里面包含五个元素,对其进行赋值,每个元素的值

使用 Javascript 将大块 HTML 插入元素的最佳实践?

如何使用 JavaScript 删除 iFrame 中的 HTML 元素

如何在标签中显示 javascript 脚本中的变量的值

javascript如何检查网页元素是不是包含某个特定字符串?