ajax - Dart:AJAX 表单提交

标签 ajax post dart form-submit

请注意:我对为此使用 Polymer 不感兴趣;我想使用“纯”Dart!

我正在尝试为我的 Dart 应用构建一个简单的登录屏幕,但很难将两个表单变量(emailpassword)POST 到服务器端:

这是我的主要 HTML 文件 (myapp.html):

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Sign in</title>
        <link rel="stylesheet" href="assets/myapp/myapp/myapp.css">
        <link rel="stylesheet" href="assets/myapp/bootstrap/css/bootstrap.min.css">
    </head>
    <body>
        <div class="container">
            <form id="signinForm" method="POST" class="form-signin">
                <h2 class="form-signin-heading">Please sign in</h2>
                <input type="text" class="input-block-level" name="email" placeholder="Email address">
                <input type="password" class="input-block-level" name="password" placeholder="Password">
                <button class="btn btn-large btn-primary" id="signinBtn" type="submit">Sign in</button>
            </form>
        </div>
        <script type="application/dart" src="myapp.dart"></script>
        <script src="packages/browser/dart.js"></script>
    </body>
</html>

这是我的主要 Dart 文件(myapp.dart):

import 'dart:html';

void main() {
    querySelector("#signinForm")
        ..onClick.listen(handle);
}

void handle(MouseEvent mouseEvent) {
    mouseEvent.preventDefault();

    FormElement formElement = mouseEvent.target as FormElement;

    var url = "http://localhost:8080/myapp/signinService";

    var request = HttpRequest.request(
        url,
        method: formElement.method,
        sendData: new FormData(formElement)
    ).then(onDataLoaded);
}

void onDataLoaded(HttpRequest req) {
    String response = req.responseText;
    if(response == 1)
        window.alert("You are signed in!");
    else
        window.alert("Sign in failed. Check credentials.");
}

当我在浏览器中运行它时,我看到登录屏幕出现,但是当我点击登录按钮时没有任何反应,并且 Firebug 在交叉编译、混淆、缩小的 JavaScript 上抛出一堆错误:

: CastError: Casting value of type qE to incompatible type Yu

我希望这是一个 AJAX 请求,这样用户就不必经历页面重新加载(这里的目的是成为一个单页应用)。

关于这里发生的事情有什么想法吗?我几乎 100% 确信问题不在服务器端,所以现在我没有发布服务器代码。但如果需要,我会用服务器代码更新我的问题。

最佳答案

这是一个例子,如何做到这一点

Forms, HTTP servers, and Polymer with Dart

当你改变的时候

void main() {
    querySelector("#signinBtn")
        ..onClick.listen(handle);
}

void main() {
    querySelector("form")
        .onSubmit.listen(handle);
}

您可以访问目标

void handle(Event event) {
    event.preventDefault();

    FormElement form = event.target as FormElement;

    ...
}

关于ajax - Dart:AJAX 表单提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20749740/

相关文章:

json - 如何在Flutter/Dart中创建通用类型的对象?

dart - 使用 Inherited Widget 时如何处理 bloc?

php - 如何在不使用 SSL 的情况下保护 POST 方法?

c# - ASP.Net 使用重定向创建服务器端发布到外部网站

ajax - MVC 4 Ajax.BeginForm POST 未绑定(bind)到 Controller 中的模型

curl - 将本地文件上传到 url 的正确 curl 命令

Qt 简单的发布请求

flutter - 我应该在何时何地将值存储在BLoC本身或其状态中

javascript - AJAX 'post' 请求中的 JSON 对象

ajax - 初始化 youtube api 以定位 ajax 加载的 iframe