数据发布与Firefox-IE不同

时间:2012-02-15 09:18:51

标签: jquery

我正在使用jquery将my blog<pre>$(function() { $.each($('pre'), function(i, e) { if (e.lang != '') { $.ajax({ url: 'pastebin.ashx', context: $(this), data: { data: $(this).text(), lang: e.lang }, success: function(t) { if (t.indexOf('*error*') != 0) { var h = Math.floor($(this).height() * 1.62) + "px"; $(this).replaceWith("<iframe src='http://pastebin.com/embed_iframe.php?i=" + t + "' style='border:none;width:100%;height:" + h + "'></iframe>") } } }); } }); });​ 标签中的代码发送给处理程序,该处理程序将使用包含格式化代码的正确pastebin.com框架替换它们。

我正在使用MD5哈希将代码块映射到pastebin对应的转换,以便每个代码段只有一个粘贴框。

问题是发布的字符串似乎在IE和Firefox之间有点变化,所以我没有完全的MD5编码。出于某种原因,问题仅出现在生产服务器上。

jquery代码是这样的:

{{1}}

是否有某些原因可以从不同的浏览器更改发布的数据? 的修改

所有IE都不会出现这个问题,同一版本9.0.8112.16421可以在一台机器上运行,而不是在另一台机器上运行!我想差异必须在$(this).text()中。失败的版本似乎包含没有回车的文本。

3 个答案:

答案 0 :(得分:2)

如果问题出在回车上,为什么不简单地将它们从文本中删除()? (可能有一个更好更安全的方法来删除alla回车,例如,看here,我只想把我想到的最简单的代码。)

    if (e.lang != '') {
        var data = $(this).text();
        data.replace(new RegExp( "\\r", "g" ), '');
        $.ajax({
            url: 'pastebin.ashx',
            context: $(this),
            data: {
                data: data,
                lang: e.lang
            },
            success: function(t) {
                if (t.indexOf('*error*') != 0) {
                    var h = Math.floor($(this).height() * 1.62) + "px";
                    $(this).replaceWith("<iframe src='http://pastebin.com/embed_iframe.php?i=" + t + "' style='border:none;width:100%;height:" + h + "'></iframe>")
                }

            }
        });
    }

这样你应该有相同的md5

答案 1 :(得分:1)

这个应该只是一个评论,但似乎我没有足够的声誉(实际上我根本没有声誉)这样做:)

只是一个建议:我记得前一段时间与IE有过类似的问题,有可能它不是jQuery问题,所以尝试使用getElementByIdinnerText来查看问题是否仍然存在,这将有助于您限制该领域。如果是这种情况,请尝试剥离CR和LF,在您的情况下,无论如何我都应该这样做。

答案 2 :(得分:0)

好的,找到了解决方案:使用html()而不是text()解决了问题:使用html()的唯一缺点是pre内容是htmlEncoded,所以我不得不修改处理程序,但我们获得的结果似乎在浏览器中保持稳定。