IE中的jQuery $ .get问题

时间:2009-05-04 20:14:07

标签: javascript jquery internet-explorer

我有一个登录表单,当用户注销时,该表单显示在我的所有页面的顶部。我当前的jQuery / javascript代码适用于Firefox 3但不适用于IE 7.代码查询页面,该页面只返回字符串“true”或“false”,具体取决于登录是否成功。在我的$ .ready()函数调用中,我有以下内容......

$('#login_form').submit(function() {

        var email = $('input#login_email').val();
        var pw = $('input#login_password').val()

        $.get('/user/login.php', { login_email: email, login_password: pw }, function(data) {
            alert('get succeeded');
            if(data == 'true') {
                $('#login_error').hide();
                window.location = '/user/home.php';
                alert('true');
            }
            else {
                $('#login_error').show();
                alert('false');
            }

        });

        alert('called');

        return false;
    });

在FF中,我已成功转移到预期页面。然而,在IE中,下面的警报“被叫”而没有别的。当我刷新页面时,我可以看到我已登录,因此$ .get调用显然正在通过,但回调函数似乎不被调用(即“获得成功”不会弹出)。我也似乎没有收到任何javascript错误消息。

为什么这不适用于IE?

由于

编辑:由于有几个人问,每当我输入正确的电子邮件/密码或错误的电子邮件/密码时,回调函数都不会发生任何事情。如果我在输入正确的页面后手动刷新页面,我就会登录。否则,我不是。

编辑2:如果我在回调函数中警告data,IE中没有任何反应(我没有收到警报弹出窗口)。在FF中,它会警告true有效的电子邮件/密件组合,false表示无效的电子邮件/密件组合。我正在使用jQuery 1.3.2。

编辑3:好的,伙计们,我在那里尝试了R. Bemrose的事情,我在返回的数据上得到了一个“解析错误”。我只是回应其他PHP脚本中的'true'或'false'。我也试过'是'和'不',但这仍然给了我一个解析错误。此外,除了FF之外,这适用于Chrome。

8 个答案:

答案 0 :(得分:5)

在您的回复类型中使用:

头( “内容类型:application / XML;字符集= UTF-8”);

答案 1 :(得分:2)

这听起来很愚蠢......也许IE7对var pw行上缺少的分号有肛门保留意见?

可能不是,但我能想到获取更多信息的唯一方法是将其转换为$ .ajax调用,以便添加错误挂钩并查看它认为发生的错误类型。哦,并检查异常对象。

$.ajax({
        type: 'GET',
        url: '/user/login.php',
        data: { login_email: email, login_password: pw },
        success: function(data) {
                alert('get succeeded');
                if(data == 'true') {
                        $('#login_error').hide();
                        window.location = '/user/home.php';
                        alert('true');
                }
                else {
                        $('#login_error').show();
                        alert('false');
                }
        },
        error: function(xhr, type, exception) {
                alert("Error: " + type);
        }
});

如果错误类型是解析,IE可能会抱怨,因为返回的数据在逗号分隔的数组/列表末尾有额外的逗号。

答案 2 :(得分:1)

IE将缓存数据用于获取请求。也许那是你的问题?如果你尝试不同的用户ID,密码怎么办?

无论如何,在POST中发送密码不是更好吗? :)

答案 3 :(得分:1)

我遇到与以下代码类似的问题:

var listOrder = $(this).sortable('toArray').toString();
var otherVariable = whatever
$.get('process_todo.cfm?method=sortToDos', {listOrder:listOrder,otherVariable :otherVariable });

变量通过警报显示为'test_123,test_456'。我可以硬编码相同的值,它不会失败。它必须与'toArray'有关?我一直试图调试这一件事几个小时。在Firefox,Safari和Chrome中完美运行......当然!

答案 4 :(得分:0)

而不是:

if(data =='true')

尝试:

如果(数据)

然后在您的服务器中返回1(或true)和空值。

答案 5 :(得分:0)

您发布的内容(至少在编辑2之后)看起来不错。我认为问题在于你没有发布的内容。

首先,您是否检查过服务器日志以确保它发送回您想要的内容?

如果是这样,我建议删除提交机制并使用带有'onclick'处理程序的'button'类型,而不是使用'onsubmit'处理程序的'submit'按钮...

 <input type="button" id="login_submit" value="Login" />

然后切换提交处理程序:

  $('#login_form').submit(function() { ... });

从表单到按钮:

  $('#login_button').click(function() { ... });

如果这没有帮助,您也可以发布表单的HTML吗?

[编辑3] - 尝试将“text”的第4个“type”参数添加到$ .post()调用中。

答案 6 :(得分:0)

您是否使用过Fiddler来了解实际转移的内容? (http://www.fiddler2.com

答案 7 :(得分:0)

如果您在本地计算机上测试/检查您的脚本,那么您将不会在任何版本的Internet Explorer中看到任何内容,因为localmachine上的IE将数据类型作为文本发送而不是xml,而在您的情况下,其数据类型的问题与您的文档数据类型,因此值得检查您的数据类型是否匹配

就xml而言解决方案就在这里 http://docs.jquery.com/Specifying_the_Data_Type_for_AJAX_Requests

你可以查看这个并找到一些灵感:)

萨勒曼