jQuery.ajax() - IE9中返回的未定义数据

时间:2012-06-23 09:29:29

标签: jquery ajax internet-explorer-9

我有一个非常简单的代码:

$.ajax({
  cache: false,
  dataType: 'html',
  complete: function(jqXHR){
    console.log(jqXHR.responseText);
  },
  success: function(data){
    console.log(data);
  },
  url: 'http://follows.pl/pages/ajaxtest'
});

它返回ff,chrome和IE8中的一些文本,但在IE9中它显示两次“undefined”。

我在IE9中查看了开发人员工具,它显示了正常的响应,因此请求工作正常,响应很好,但变量未定义

回复标题:

Response    HTTP/1.1 200 OK
Cache-Control   no-cache
Content-Type    text/html; charset: UTF-8
Pragma  no-cache

响应

string(4) "test"

3 个答案:

答案 0 :(得分:7)

我怀疑这是你的问题:

Content-Type    text/html; charset: UTF-8

该值格式不正确(charset错误后的':')并且IE9不喜欢它,但是默默地失败而不是说有用的东西。试试这个:

Content-Type:    text/html;charset=utf-8

答案 1 :(得分:1)

我尝试了一切来解决在IE浏览器上发布ajax的问题​​(例如添加到jquery ajax对象没有缓存,dataType,configType等等),但最后问题不是在ajax / javascript中而是在PHP文件:只有对于IE浏览器,PHP文件必须以下面的标题开头

header("Content-type: text/html; charset=utf-8");

所以,你必须明确指出你的ajax调用得到的php页面的内容类型

示例,假设一个名为 one.html 的html页面放置了你的javascript和一个名为 two.php 的php页面

在one.html中将javascript设置为

var url = 'two.php';
$.ajax({
url: url,
type: "POST",
success: function(response){
alert(response)
}
});

在two.php页面中设置如下:

<?php
header("Content-type: text/html; charset=utf-8");
echo ('stuff to do');
?>
用这种方式对我来说它就像一个魅力!

答案 2 :(得分:0)

试试这个:

$.ajax({
  cache: false,
  dataType: 'html',
  complete: function(data){
    console.log(data);
  },
  success: function(data){
    console.log(data);
  },
  url: 'http://follows.pl/pages/ajaxtest'
});

通知

成功函数中的

 success: function (data, textStatus, jqXHR)

对象是third参数。

你实际上通过访问那里不存在的属性来响应数据。

也在完整的功能

 complete: function (jqXHR, complete_textStatus)

这里的对象是first地方!

你必须记住这些位置。