我知道IE中的jquery / ajax是一个常见问题。关于堆栈溢出,这里有很多很棒的建议,但它们对我来说都没有用。 下面的代码在firefox中运行得很好,但在IE中不行:
$.ajaxSetup({ cache: false })
$.ajax({
url: 'FunDataService.asmx/' + funDataMethod,
type: 'POST', dataType: 'html', cache: false, timeout: 3000,
error: function() {alert('Error updating fun information. Refresh the page and try again.');},
success: function(htmlFunInfo) {
alert($(htmlFunInfo).text());
$("#fundiv").html($(htmlFunInfo).text())},
data: parameters
});
您可以看到我的反缓存尝试;我还在URL中添加了随机值。我还尝试在网络服务上添加各种内容标题:
' Context.Response.ContentType = "text/html; charset=utf-8"
' Context.Response.ContentType = "text/html"
Context.Response.ContentType = "text/plain"
alert命令用于调试。在FF中,$(htmlFunInfo).text()
是从我希望插入的服务器发送的div标签。在IE中,它是空字符串。
有没有人知道如何在IE中访问此字符串值?谢谢!
修改 服务器的响应如下:
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="tempuri.org/">
<div>stuff</div>
<div>more stuff</div>
</string>
我越来越认为这是错的,我需要避免绕过div。
编辑2 就是这样!在我的服务器代码中,我替换了:
Return RemarkHtml
与
Context.Response.Write(RemarkHtml)
这避免了div周围的标签,现在我很好。不过,我认为这是一个很大的问题,在IE中,你无法使用.text()来获取标签的内容。
谢谢你们!
答案 0 :(得分:5)
而不是
alert($(htmlFunInfo).text());
$("#fundiv").html($(htmlFunInfo).text());
尝试
alert(htmlFunInfo);
$("#fundiv").html(htmlFunInfo);
问题是,对.text()
和.html()
的调用会获取所选节点的文本和HTML 内容。看起来你想要做的就是将整个响应注入#fundiv
。
答案 1 :(得分:2)
您是否尝试将jQuery Ajax dataType选项更改为“text”?
$.ajaxSetup({ cache: false })
$.ajax({
url: 'FunDataService.asmx/' + funDataMethod,
type: 'POST',
dataType: 'text', // instead of 'html'
cache: false,
timeout: 3000,
error: function() {
alert('Error updating fun information. Refresh the page and try again.');
},
success: function(htmlFunInfo) {
alert($(htmlFunInfo).text());
$("#fundiv").html($(htmlFunInfo).text())
},
data: parameters
});
修改强>
另一种选择是jQuery .load()方法。它将AJAX响应的结果附加到jQuery选定对象。您可以使用ajaxSetup()为请求配置ajaxOptions。
.load()doc:
http://docs.jquery.com/Ajax/load#urldatacallback
$.ajaxSetup({
type: 'POST',
dataType: 'text',
cache: false,
timeout: 3000,
error: function() {
alert('Error updating fun information. Refresh the page and try again.');
},
data: parameters
});
$("#fundiv").load( 'FunDataService.asmx/' + funDataMethod );
答案 2 :(得分:1)
我不完全理解为什么它适用于FF而不是IE,但我猜它与每个浏览器如何创建节点heiarchy的差异有关。
在任何一种情况下,变量htmlFunInfo中的内容都是一个字符串,因此不需要调用text()。就像Jason所说,如果你拿出.text(),它应该可以工作。