0

我有一个在使用 chrome 时可以正常工作的注销功能。但是对于 Firefox,它不会。从我在 Firefox 中可以看出,这foo.setAttribute( "action", "../index.php" );并没有像在 Chrome 中那样正确发生。这让我大吃一惊,因为我无法在 Firebug 中真正调试这部分。

<?php
require_once('/lock_down/php/db_login.php');
require_once('/lock_down/php/authenticate.php');

if (isset($_POST['action'])) {
    $action = $_POST['action'];
} else {
    $action = 'first_time';
}

switch($action) {
case 'first_time':
    include('/lock_down/login.html');
    break;
case 'login' :
    $username = $_POST['uname'];
    $password = $_POST['pword'];
    if (http_login($username, $password)) {
        include('/lock_down/file_server.html');
    } else { 
        include('/lock_down/login.html');
    }
    break;

case 'logoff' :
    $_POST = array();
    echo "logged off";
    include('/lock_down/login.html');
    break;

default: 
//  include('/lock_down/php/login.php');
    break;


}

?>

JavaScript 注销例程的摘录来自file_server.html

        case "logoutButton":
        var form = document.createElement("form");
        var foo = document.createElement("input");
        foo.setAttribute( "method", "post");
        foo.setAttribute( "type", "hidden");
        foo.setAttribute( "action", "../index.php" );
        foo.setAttribute( "name", "action");
        foo.setAttribute( "value", "logoff");
        form.appendChild(foo);
        form.submit();
        break;

同样,所有这些都适用于 chrome。但在 Firefox 中,它不会注销和加载../index.php

4

1 回答 1

3

您正在设置表单methodaction输入元素,而不是表单元素

foo.setAttribute( "method", "post");

应该

form.setAttribute( "method", "post");

编辑:不确定一个不在 DOM 中的表单是否会在所有浏览器中提交,可能还需要附加它。您可以在成功回调中使用重定向发出 ajax 请求,而不是创建表单

于 2012-11-04T01:11:35.827 回答