我有一个登录表单,当用户注销时,该表单显示在我的所有页面的顶部。我当前的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。
答案 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
你可以查看这个并找到一些灵感:)
萨勒曼