Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 数据发布不同于Firefox IE_Jquery - Fatal编程技术网

Jquery 数据发布不同于Firefox IE

Jquery 数据发布不同于Firefox IE,jquery,Jquery,我使用jquery将的一些标记中的代码发送到处理程序,处理程序将用包含格式化代码的正确的pastebin.com框架替换这些代码 $(function() { $.each($('pre'), function(i, e) { if (e.lang != '') { $.ajax({ url: 'pastebin.ashx', context: $(this),

我使用jquery将的一些
标记中的代码发送到处理程序,处理程序将用包含格式化代码的正确的pastebin.com框架替换这些代码

$(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>")
                    }

                }
            });
        }
    });

});​
我使用MD5散列将代码块映射到pastebin对应的翻译,以便每个代码段只有一个paste bin

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

jquery代码如下所示:

    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>")
                }

            }
        });
    }
$(函数(){
$。每个($('pre'),函数(即){
如果(e.lang!=''){
$.ajax({
url:'pastebin.ashx',
上下文:$(本),
数据:{
数据:$(this).text(),
朗:e。朗
},
成功:功能(t){
如果(t.indexOf('*error*')!=0){
var h=数学地板($(this).height()*1.62)+“px”;
$(此)。替换为(“”)
}
}
});
}
});
});​
发布的数据可能会在不同的浏览器中更改,这有什么原因吗? 编辑


问题并非发生在所有IE上,相同版本的9.0.8112.16421在一台机器上工作,而不是在另一台机器上!我想差异一定在$(this).text()中。失败的版本似乎包含没有回车符的文本。

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


只是一个建议:我记得不久前IE也有类似的问题,这可能不是jQuery问题,所以尝试使用
getElementById
innerText
查看问题是否仍然存在,这将帮助您限制字段。如果是这样的话,试着去掉CR和LF,在你的情况下,我想这应该会起作用。

如果问题在于回车,为什么不干脆把它们从文本中去掉()?(可能有一种更好、更安全的方法来剥离所有的回车符,例如,我只想到了最简单的代码)

if(e.lang!=''){
var data=$(this.text();
数据。替换(新的RegExp(“\\r”,“g”),”);
$.ajax({
url:'pastebin.ashx',
上下文:$(本),
数据:{
数据:数据,
朗:e。朗
},
成功:功能(t){
如果(t.indexOf('*error*')!=0){
var h=数学地板($(this).height()*1.62)+“px”;
$(此)。替换为(“”)
}
}
});
}

通过这种方式,您应该拥有相同的md5

好的,找到了解决方案:使用
html()
而不是
text()
修复了问题:使用html()的唯一缺点是预内容是html编码的,因此我必须修改处理程序,但是我们得到的结果在不同浏览器中似乎是稳定的。

你有ff和ie发送post的例子吗?@evip没有,它只发生在共享主机的服务器上…@FelicePollano evip的意思是你能在ie和ff中发布AJAX调用中发送的数据吗。@Rorymcrossan这只是c代码的一个简单部分,正如我在可测试应用程序中所看到的那样。@EVIP失败的版本似乎包含没有回车符的代码。+1好的,这将解决MD5问题,但pastebin代码段将根本不包含CR,这是不需要的。@FelicePollano您仍然有换行符,这还不够吗?或者如果不好,您可以在缺少换行符的地方添加\r,我们的想法是“手动”标准化文本,因为您无法控制浏览器如何解释文本。事实上,我不明白到底发生了什么,因为有时这在IE上也起作用。@FelicePollano在这种情况下,您应该进行检查,以验证每个
\n
后面都有一个
\r
。如果不是,则添加它。这意味着手动迭代每个字符,但至少您可以100%确定字符串始终是相同的+1,但是去掉cr会导致生成的pastebin代码段不正确……对,抱歉,但我不知道pastebin是如何工作的,我认为MD5生成与代码段本身是不同的问题。