当前位置: 首页 > 面试题库 >

Play 2.x:如何使用通用按钮发出AJAX请求

尉迟鑫鹏
2023-03-14
问题内容

因此,我之前已经成功获得了工作的Ajax请求,但是我始终必须使用一种表单,然后在提交末尾返回false,以使它不会刷新页面。

最近我也将JavaScript移到了一个单独的文件中,这导致我的@命令失败。因此,我是否不应该将我的网址设置为我的路线?

HTML:

<button id="saveAsDefaultButton">Save as default</button>

Playframework Java代码:

public static Result saveDefaultPhoneForUser(String handset) {
    User currentUser = User.findByName(session("name"));
    currentUser.lastControlledHandset = theHandset;
    currentUser.save();
    return ok();
}

路线:

POST    /                           controllers.Application.saveDefaultPhoneForUser(handset : String)

javascript:

$('#saveAsDefaultButton').click(function(evt) {
        $('#errors').hide();
        $.ajax({
            type : 'POST',
            url : "controllers.Application.saveDefaultPhoneForUser",
            data : $('#controlledPhone option:selected').text(),
            dataType : "text",
            success : function(data) {
                //setError('Call succedded');
                //$('#test1').attr("src", data)
            },
            error : function(data) {
                setError('Make call failed');
            }
        });
        return false;
    });

我肯定有办法做到这一点,我只是找不到运气。任何帮助大加赞赏。


问题答案:

对于这项工作,您应该继续使用javascriptRoutes它,因为它会根据routes.conf生成正确的JS路径。您将在Zentask
示例中找到用法示例

无论如何,现在您可以通过将更url改为来修复AJAX调用

url : '@routes.Application.saveDefaultPhoneForUser()',

这种方法要求将整个JS放在模板中,这是错误的。可以甚至应该将其移动到单独的JS文件中,并使其成为可能,您需要使用javascriptRoutes。

更多…

javascriptRoutes 尚未 在官方文档中描述,但这里是逐步的介绍。尽管描述看起来很复杂,但 实际上
使用这种方式会带来很多好处。

1.创建通用路线

首先,您需要在conf/routes文件中创建通用路由:

GET     /item/:id     controllers.Application.getItem(id: Long)
POST    /item/new     controllers.Application.newItem
PUT     /item/:id     controllers.Application.updateItem(id: Long)

当然,您至少需要在Application控制器中创建以下三个动作:

  • getItem(Long id){ ... }
  • newItem() { ... }
  • updateItem(Long id) { ... }

2.创建一个将通用路由转换为JS的动作

  • 将其放置在某处,即。在您的Application控制器中
  • 叫它吧 javascriptRoutes()

在该操作中,您将指向文件中的 现有 路由conf/routes

public static Result javascriptRoutes() {
    response().setContentType("text/javascript");
    return ok(
        Routes.javascriptRouter("myJsRoutes",
            routes.javascript.Application.getItem(),
            routes.javascript.Application.newItem(),
            routes.javascript.Application.updateItem(),
            //inside somepackage
            controllers.somepackage.routes.javascript.Application.updateItem()
        )
    );
}

注意: 请勿在方括号中设置任何参数。

3.创建javascriptRoutes行动路线并将其包含在模板中

路线 conf/routes

GET     /javascriptRoutes     controllers.Application.javascriptRoutes

<head>部分检视/views/main.scala.html

<script type="text/javascript" src='@routes.Application.javascriptRoutes()'></script>

4.在需要的地方使用javascriptRoutes

从现在开始,您可以使用JS中的路由来获取正确的路径,而无需指定urland type。举个例子代替:

 $('.getAjaxForThisContainer').click(function(e) {
    var idToGet = $("#someField").val();
    $.ajax({
        type : 'GET',
        url : '@routes.Application.getItem()',
        data : {
            id: idToGet
        },
        success : function(data) {
            // ... some code on success
        }
    });
    return false;
});

您可以使用简化版本(myJsRoutes从第2点开始):

myJsRoutes.controllers.Application.getItem(idToGet).ajax({
    success : function(data) { ... some code ... }
});

要么

myJsRoutes.controllers.Application.newItem().ajax({
    success : function(data) { ... some code ... }
});

等等…

  • 您无需指定type: "POST"-JS路由器将根据conf/routes规则使用正确的方法
  • 您可以使用纯JS中的语法id将记录(或其他参数)设置为GETPUT(或其他方法)routes-like
  • 如果您的路线规则包含所有必需的参数,则可以将您的JS最小化:

路线:

GET   /some/:a/:b/:c    controllers.Application.getABC(a: String, b: Integer, c: String)

JS:

myJsRoutes.controllers.Application.getABC("a", 1, "b" ).ajax({});


 类似资料:
  • 所以我实际上已经阅读了关于这个的stackoverflow问题,但是它们对于使用最新版本的wordpress来说有点太老了。 我的最终目标是提交我的表单中的一些数据到数据库,但现在ajax响应对我不起作用。在WP中的自定义页面加载中,将加载所有代码,以便所有函数都应正常工作。所有这些都在PHP文件中,为什么使用echo来创建JS脚本。这是我代码的重要部分 使用WP的当前版本,所以变量ajaxurl

  • 问题内容: 如何使用jQuery明确提出AJAX HTTPS GET请求?我正在尝试执行以下操作。在https页面上,我有一行代码,但是出现以下错误 如果相对资源来自https页面,为什么AJAX调用会尝试使用HTTP协议访问页面?如果$ .get(url)方法默认执行此操作,那么我如何使用jQuery进行显式的HTTPS GET请求?在http://forum.jquery.com/topic/

  • 问题内容: 我试图在单击按钮后禁用它。我努力了: 但该按钮并未被禁用。当我删除 按钮被禁用。 虽然这没有按预期工作,但我认为代码顺序是正确的。任何帮助将不胜感激。 问题答案: 放入成功函数: 这将确保 在 加载数据 后将 disable设置为false 。当前,您在同一单击功能(即同时)中禁用和启用按钮。

  • 第一次: Hackerrank抛出错误,因为不是函数。我还尝试了和,但都无济于事。 我尝试了:

  • 问题内容: 这是根据提供的示例验证geoJSON的代码: 我正在尝试使用以下代码进行验证: 在此,我提出实际要求: 我在Chrome控制台中收到此错误: 标题 这是与请求相关的数据: 问题答案: 您不应该将其设置为请求标头,而是响应标头。 您可以从响应中看到服务器将接受哪些请求标头: 错误消息告诉您: 似乎也可能不接受。

  • 问题内容: 我试图在带有Razor的MVC 4中使用$ .ajax发出AJAX请求。我不确定如何实现它。 使用此视频,我能够成功进行返回数据的链接驱动的调用,但是我似乎无法在jquery函数中执行相同的操作。我似乎找不到如何执行此操作的任何基本示例。这就是我正在使用的: HomeController.cs View.cshtml 问题答案: 您只需要使其成为一个。另外,如果您使用的是Ajax PO