Jquery 数据发布不同于Firefox IE
我使用jquery将的一些Jquery 数据发布不同于Firefox IE,jquery,Jquery,我使用jquery将的一些标记中的代码发送到处理程序,处理程序将用包含格式化代码的正确的pastebin.com框架替换这些代码 $(function() { $.each($('pre'), function(i, e) { if (e.lang != '') { $.ajax({ url: 'pastebin.ashx', context: $(this),
标记中的代码发送到处理程序,处理程序将用包含格式化代码的正确的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生成与代码段本身是不同的问题。