Javascript jQuery ajax在IE中返回空数据

Javascript jQuery ajax在IE中返回空数据,javascript,jquery,Javascript,Jquery,我使用ajax获取一些数据,然后根据这些数据使用html()将其放到页面上 在IE中,返回的数据是空的(它是html)。它仍然会触发success函数,但html不存在。我已经设置了数据类型:“text”,但仍然不起作用 有什么想法吗 谢谢 编辑: 下面是确切的代码: $('#frm').submit(function(event){ event.preventDefault(); var self = this; z = $('#zipcode'

我使用ajax获取一些数据,然后根据这些数据使用html()将其放到页面上

在IE中,返回的数据是空的(它是html)。它仍然会触发success函数,但html不存在。我已经设置了数据类型:“text”,但仍然不起作用

有什么想法吗

谢谢

编辑:

下面是确切的代码:

$('#frm').submit(function(event){
        event.preventDefault();
        var self = this;
        z = $('#zipcode');
        if(z.val() != '' && z.val().length == 5) {
            var value = z.val().replace(/^\s\s*/, '').replace(/\s\s*$/, '');
            var intRegex = /^\d+$/;
            if(!intRegex.test(value)) {
                return false;
            }
        } else {
            return false;
        }

        $.ajax({
            url: "/ajax/zip", 
            type: 'GET',
            async: false,
            dataType: 'html',
            data:   {zipcode: $('.zip_field').val()},
            success: function(data) {
                    if(data == 'false'){
                        error($(".zip_field"));
                        return false;
                    }else{
                        self.submit();
                        $('.container').empty().append(data);
                    }
            }
        });
})
它正在提交一个邮政编码。在提交时,它会检查以确保它是一个数字,长度为5位数。如果通过,它将转到ajax并检查以确保它是有效的邮政编码(数据库检查),如果失败,它将以文本形式返回“false”,如果良好,则返回一些html


它适用于Firefox和Chrome,但不适用于IE。如果效果良好,它会提交表单,但返回的数据是空的,并附加为空空间。

一件事可能是浏览器缓存了此URL。如果您获得
304
状态,您的响应文本将为空。检查HTTP缓存头,并正确调整它们。您还可以尝试使用
POST
(仅缓存
GET
)。 另外,如果设置正确,请查看内容长度

如果以上任何一项都不起作用,请检查网络呼叫将为您(和我们)提供的一些其他详细信息,尝试IE的开发工具


您还可以尝试直接使用XMLHttpRequest的对象获得相同的请求(假设您使用的是IE>6)

一件事可能是浏览器缓存了此URL。如果您获得
304
状态,您的响应文本将为空。检查HTTP缓存头,并正确调整它们。您还可以尝试使用
POST
(仅缓存
GET
)。 另外,如果设置正确,请查看内容长度

如果以上任何一项都不起作用,请检查网络呼叫将为您(和我们)提供的一些其他详细信息,尝试IE的开发工具

您还可以尝试直接使用XMLHttpRequest的对象获得相同的请求(假设您使用的是IE>6)

  • 演示:
你的代码不工作仅仅是因为它有缺陷,它与IE无关。 应该是下面的样子

$('#frm').submit(function (e) {
    e.preventDefault(); // this one already act as return false...

    var form = $(this);
    // why you have .zip_field & #zip_code ?
    var zip_code = $.trim($('#zip_code').val());
    var valid = (zip_code.length === 5 && !isNaN(zip_code)) ? true : false;

    if (valid) {
        $.get('/ajax/zip', {
            zipcode: zip_code
        }, function (data) {
            if (data == 'false') {
                alert('error!');
            } else {
                //if you submit the form here 
                //form.submit(); then the line below 
                //is totally useless
                $('.container').html(data);
                //.empty().append() is = .html()
            }
        });
    }
});
  • 注意:chrome和firefox不显示错误并不意味着没有错误;internet explorer每次运行错误的代码等时都会显示错误。此外,我强烈怀疑您的代码是否真的能像预期的那样工作,因为它没有您想象的那么好。我想问题出在您的代码中,与jQuery本身或它的ajax函数或数据类型无关
  • 演示:
你的代码不工作仅仅是因为它有缺陷,它与IE无关。 应该是下面的样子

$('#frm').submit(function (e) {
    e.preventDefault(); // this one already act as return false...

    var form = $(this);
    // why you have .zip_field & #zip_code ?
    var zip_code = $.trim($('#zip_code').val());
    var valid = (zip_code.length === 5 && !isNaN(zip_code)) ? true : false;

    if (valid) {
        $.get('/ajax/zip', {
            zipcode: zip_code
        }, function (data) {
            if (data == 'false') {
                alert('error!');
            } else {
                //if you submit the form here 
                //form.submit(); then the line below 
                //is totally useless
                $('.container').html(data);
                //.empty().append() is = .html()
            }
        });
    }
});
  • 注意:chrome和firefox不显示错误并不意味着没有错误;internet explorer每次运行错误的代码等时都会显示错误。此外,我强烈怀疑您的代码是否真的能像预期的那样工作,因为它没有您想象的那么好。我想问题出在您的代码中,与jQuery本身或它的ajax函数或数据类型无关

我在IE和谷歌浏览器上也有同样的问题

由于安全原因,$.ajax在此浏览器中不工作

所以如果你想明确地运行

对于chrome,使用chrome运行

chrome.exe --disable-web-security

在IE中,您需要更改“菜单>工具>互联网选项”中的设置。在IE和谷歌浏览器中,我也有同样的问题

由于安全原因,$.ajax在此浏览器中不工作

所以如果你想明确地运行

对于chrome,使用chrome运行

chrome.exe --disable-web-security
在IE中,您需要从“菜单>工具>互联网选项”更改某些版本的设置,然后简单地放弃它;我以前被这个咬过

确保返回的HTML对IE认为您正在使用的doctype有效(请使用IE中的开发人员工具查看),并使用检查HTML。显然,它会抱怨缺少
等,但会忽略这些错误,并将重点放在其他错误上。一旦你解决了这些问题,它就会开始工作

此外,还有很多改进代码的好方法。

一些版本的,只需丢弃它;我以前被这个咬过

确保返回的HTML对IE认为您正在使用的doctype有效(请使用IE中的开发人员工具查看),并使用检查HTML。显然,它会抱怨缺少
等,但会忽略这些错误,并将重点放在其他错误上。一旦你解决了这些问题,它就会开始工作


此外,还有很多改进代码的好技巧。

您是否尝试过改为
dataType:html
?也许我们可以看到一些代码?您是否可以显示ajax调用代码,以及firebug中的任何错误,您是否可以看到firebug响应中返回的数据?另外,请确认返回的html是有效的html。你很挑剔,除了你试过的以外?您是否尝试通过直接URL访问ajax页面您是否尝试了
dataType:html
?也许我们可以看到一些代码?您是否可以显示您的ajax调用代码,以及firebug中的任何错误,您是否可以看到firebug响应中返回的数据?另外,请确认返回的html是有效的html。你很挑剔,除了你试过的以外?您是否尝试通过直接URL而不是使用IE开发工具来访问ajax页面?我建议您在IE中的网络监控部分使用类似fiddlr的东西。使用开发工具监控请求应该足够了–通常在其他浏览器上。我考虑过fiddlr,但我并不建议它避免安装和解释额外的软件,在这种情况下,除了嵌入式开发工具之外,它不会带来任何好处。除了IE9之前版本中的IE网络工具有各种奇怪的bug和