Javascript jQuery$出现问题。进入IE

Javascript jQuery$出现问题。进入IE,javascript,jquery,internet-explorer,Javascript,Jquery,Internet Explorer,我有一个登录表单,当用户注销时,它会出现在我所有页面的顶部。我当前的jQuery/javascript代码可以在Firefox3中使用,但不能在IE7中使用。代码查询的页面只返回字符串“true”或“false”,具体取决于登录是否成功。在我的$.ready()函数调用中,我有以下内容 $('#login_form').submit(function() { var email = $('input#login_email').val(); var pw = $

我有一个登录表单,当用户注销时,它会出现在我所有页面的顶部。我当前的jQuery/javascript代码可以在Firefox3中使用,但不能在IE7中使用。代码查询的页面只返回字符串“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调用显然正在进行,但回调函数似乎没有被调用(即“get Successed”没有弹出)。我似乎也没有收到任何javascript错误消息

为什么这在IE中不起作用

谢谢

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

编辑2:如果我在回调函数中发出警报
数据
,IE中不会发生任何事情(我不会得到警报弹出窗口)。在FF中,它对有效的电子邮件/pw组合发出
true
警报,对无效组合发出
false
警报。我正在使用jquery1.3.2


编辑3:好了,伙计们,我在下面试了R.Bemrose的东西,结果返回的数据出现了“parseerror”。我只是重复另一个PHP脚本中的'true'或'false'。我也尝试了“是”和“否”,但这仍然给了我一个解析错误。此外,除了FF之外,这也适用于Chrome。

IE使用缓存数据进行get请求。也许这是你的问题?如果您尝试不同的用户id、密码,会发生什么情况


在任何情况下,在POST中发送密码不是更好吗?:)

这听起来很愚蠢。。。也许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);
        }
});
如果错误类型为parse,IE可能会抱怨,因为返回的数据在逗号分隔的数组/列表末尾有额外的逗号。

而不是:

如果(数据=='true')

尝试:

如果(数据)

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

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

首先,您是否检查了您的服务器日志,以确保它正在返回您假定的内容

如果是这样,我建议放弃提交机制,使用带有“onclick”处理程序的“button”类型,而不是带有“onsubmit”处理程序的“submit”按钮

 <input type="button" id="login_submit" value="Login" />
从表单到按钮,包括:

  $('#login_button').click(function() { ... });
如果这没有帮助,你可以发布表单的HTML吗


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

您是否使用Fiddler仔细查看实际传输的内容?()

在响应类型中使用:


标题(“内容类型:application/xml;字符集=utf-8”)

如果您在本地机器上测试/检查脚本,那么在任何版本的internet explorer中都不会看到任何东西,因为IE在本地机器上以文本而不是xml的形式发送数据类型,在您的情况下,其数据类型与文档数据类型不兼容,因此值得检查您的数据类型是否匹配

就xml而言,解决方案就在这里

您可以查看此信息并找到一些灵感:)


salman

我对以下代码有类似的问题:

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中完美运行。。。当然

你的代码是不是被压缩了?这可能不是问题所在,但是您在这一行的末尾缺少了一个分号:var pw=$('input#login_password').val(),如果您的代码在到达客户端之前就被缩小了,可能IE的解析器无法理解事情,但FF正在做。不,没有进行压缩。添加分号没有区别。email和pw是否有有效值?您使用的是哪个版本的jQuery?当您发出警报(数据)时会发生什么情况;事实上,在IE7中,一篇帖子可能更有意义,所以我把它改成了这样。但是,当使用正确的数据时,登录是成功的,只是回调函数中没有执行任何内容。当我手动刷新页面时,我可以看到我现在已登录。如果用户名/密码组合不正确,“false”警报也不会出现。有趣的是,我将login.php更改为返回1或如您所说的空字符串,并且不再因为错误的电子邮件/pw组合而出错。然后我会说您的问题出在服务器端php代码上。用萤火虫或小提琴手来看看有什么东西回来了。它确实在发回我猜想的东西。我确实使用了参数类型“text”,但它没有做任何事情。我也不认为这是一个事件问题,因为提交事件肯定是被输入的(如果您查看代码,就会收到“调用”的警报);但想法是一样的。我认为IE在某些响应类型上存在问题,但这也很酷。:)多么折磨人啊!!!最后,问题解决了。通过将时间作为参数附加到get url:var sDate=new Date()$.get('process_todo.cfm?method=sortToDos&'+sDate.getTime(),…)上来伪造IE缓存。。。
var listOrder = $(this).sortable('toArray').toString();
var otherVariable = whatever
$.get('process_todo.cfm?method=sortToDos', {listOrder:listOrder,otherVariable :otherVariable });