使用XMLHttpRequest发布表单后重定向

时间:2017-11-17 17:46:09

标签: javascript xmlhttprequest

以下方案。我有一个简单的用户名和密码登录表单。 用户单击登录按钮是否将表单发布到正在检查凭据的服务器。当它们没问题时,会重定向到默认目标网页。

为了发送表格数据,我写了以下内容:

static async postData<TResult>(options: { method: string, url: string, data?: any }): Promise<TResult> {
    return new Promise<TResult>((resolve, reject) => {
        try {
            const xhr = new XMLHttpRequest();

            xhr.onload = (): void => {
                if (xhr.readyState === 4) {
                    if (xhr.status === 200) {
                        resolve(xhr.response);
                    } else {
                        reject(xhr.status);
                    }
                }
            };

            xhr.withCredentials = true;
            xhr.open(options.method, options.url, true);
            xhr.send(options.data);
        } catch (e) {
            console.error(e);
        } 
    });
}

被称为:

const response = await postData({ method: theForm.method, url: theForm.action, data: formData })
    .then(response => {
        console.log(response);
    })
    .catch(reason => {
        console.error(reason);
    });

在Chrome和Firefox中,响应具有responseURL - 属性,我可以使用该属性设置window.location.url = xhr.responseURL;以重定向页面。但是这在IE中不起作用,因为响应类型是完全不同的东西。 另一方面,我在xhr.responseText中有完整的HTML(重定向的内容,也就是着陆页的内容),但我不知道如何使用它?

我尝试按照here所述替换页面内容但是这会在Chrome和IE中引发一系列错误,而这些错误根本无法显示

  

SCRIPT70:权限被拒绝

一些额外的说明。我正在使用TypeScript编写针对es6的客户端代码,然后使用babel-loader通过webpack将其转换为es5。

1 个答案:

答案 0 :(得分:0)

我认为你需要尝试下一个代码:

Sub test()

    Dim frm As New UserForm1

    frm.Show vbModeless

    Do
        DoEvents
        If frm.Cancelled Then
            Unload frm
        Exit Do
    End If
    Loop Until False

    MsgBox "You closed the modeless form."

    '/ Using With
    With New UserForm1
        .Show vbModeless
        Do
            DoEvents
            If .Cancelled Then Exit Do
        Loop Until False
    End With

    MsgBox "You closed the modeless form (with)"

End Sub