jQuery ajax在IE中返回数据为空

时间:2011-09-16 21:12:19

标签: javascript jquery

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

在IE中,返回的数据为空(它是html)。它仍会触发成功功能,但html不存在。我已经设置了dataType:“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。当它很好时,它会提交表单,但返回的数据为空,并附加为空格。

4 个答案:

答案 0 :(得分:6)

  

你的代码不起作用只是因为它有bug,它与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函数或dataType
  •   

答案 1 :(得分:3)

有一件事可能是浏览器缓存了此URL。如果您获得304状态,则您的回复文字将为空。检查HTTP缓存标头,并正确调整它们。您还可以尝试使用POST(仅缓存GET)。 另外,如果设置正确,请查看Content-Length。

如果上述情况无效,请检查网络的电话会给你(和我们)一些额外的细节,试试IE的开发工具。

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

答案 2 :(得分:1)

我在IE和谷歌浏览器中遇到同样的问题

$。由于安全原因,ajax无法在此浏览器中运行。

所以,如果你想明确地运行

用于运行chrome chrome chrome

chrome.exe --disable-web-security

在IE中,您需要更改菜单>工具>互联网选项

中的设置

答案 3 :(得分:1)

IE will not ~repair~ invalid HTML in XHR requests的某些版本,只是丢弃它;我以前一直被这个咬过。

确保返回的HTML对IE认为您正在使用的doctype有效(使用IE中的开发人员工具查看),并使用a validator tool检查您的HTML。显然,它会抱怨丢失<html><head>等,但忽略了这些并关注其他错误。一旦你修好了它,就应该开始工作了。

此外,aSeptik's answer还有很多改进代码的好建议。