jquery ajax在mozilla工作,但不是IE

时间:2009-12-15 15:11:37

标签: .net ajax jquery

我知道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()来获取标签的内容。

谢谢你们!

3 个答案:

答案 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(),它应该可以工作。