2009-05-04 74 views
4

我有一个登录表单,当用户注销时,它出现在我所有页面的顶部。我当前的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调用显然正在进行,但回调函数看起来并不像它被调用的那样(即“get successful”不会弹出)。我也似乎没有得到任何JavaScript错误消息。

为什么不在IE中工作?

感谢

编辑:由于几个人问,每当我在回调函数输入正确的电子邮件/密码或不正确的一个,没有任何反应。如果我在输入正确的页面后手动刷新页面,则我已登录。否则,我不是。

编辑2:如果我提醒了在回调函数没有data发生在IE(我没有得到一个警报弹出)。在FF中,它提示true有效的电子邮件/ pw组合和false无效的组合。我正在使用jQuery 1.3.2。

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

+0

是你的代码被压缩了吗?这可能不是问题,但是你在这行的最后一行缺少一个分号:var pw = $('input#login_password')。val(),如果你的代码在到达客户端之前被缩小,也许IE的解析器无法理解事物,但FF正在这样做。 – 2009-05-04 20:33:50

+0

不,不做压缩。添加分号没有区别。 – Wickethewok 2009-05-04 20:39:15

+0

电子邮件和密码是否有效? – 2009-05-04 20:50:38

回答

5

在您的响应类型使用:

标题( “内容类型:应用/ XML;字符集= UTF-8”);

1

IE使用缓存数据获取请求。也许这是你的问题?如果您尝试使用不同的用户名和密码会怎么样?

无论如何,在POST中发送密码不是一个好主意吗? :)

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可以抱怨,因为数据回来具有逗号分隔的阵列/列表的末尾额外逗号。

0

相反的:

如果(数据== '真')

尝试:

如果(数据)

然后在你的服务器只返回一个1(或真)和一个空值。

0

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

首先,你是否检查过你的服务器日志,以确保它发回你的设想?

如果是的话,我建议你滴提交机制,并使用“按钮”型与“的onclick”处理程序,而不是“提交”按钮,W/A“的onsubmit”处理......

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

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

到按钮用:

然后切换提交处理

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

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

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

0

如果您在本地机器上测试/检查您的脚本,那么您将不会在任何版本的Internet Explorer中看到任何内容,因为localmachine上的IE将数据类型发送为文本而不是xml,并且在您的情况下再次遇到数据类型不兼容的问题与您的文档的数据类型,因此值得一试,如果你的数据类型对于XML解决方案去匹配

在这里 http://docs.jquery.com/Specifying_the_Data_Type_for_AJAX_Requests

您可以检查这一点,并找到一些灵感:)

萨尔曼

1

我时遇到类似的问题用下面的代码:通过一个警告为“test_123,test_456”

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

的可变显示。我可以硬编码相同的值,它不会失败。它必须与'toArray'有关?我一直在努力调试这一件事几个小时。在Firefox,Safari和Chrome中完美工作......当然!