- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
所以我之前已经成功地让 AJAX 请求工作,但我总是不得不使用一个表单,然后在提交结束时返回 false,这样它就不会刷新页面。
我最近也刚刚将我的 JavaScript 移动到一个单独的文件中,这导致我的 @ 命令失败。因此,我不知道如何将我的 URL 设置为我的路由?
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 sample 中找到使用示例
无论如何,现在您可以通过更改 url
来修复您的 AJAX 调用。到
url : '@routes.Application.saveDefaultPhoneForUser()',
这种方式需要将整个 JS 放到模板中,这是错误的。它可以甚至应该被移动到单独的 JS 文件中,以便您需要使用 javascriptRoutes。
更多...
javascriptRoutes在官方文档中还没有描述,这里是一步一步的介绍。虽然描述看起来很复杂事实上使用这种方式带来了很多好处。
首先您需要在 conf/routes
中创建公共(public)路由文件:
GET /item/:id controllers.Application.getItem(id: Long)
POST /item/new controllers.Application.newItem
PUT /item/:id controllers.Application.updateItem(id: Long)
当然,您至少需要在Application
中创建这三个操作 Controller :
getItem(Long id){ ... }
newItem() { ... }
updateItem(Long id) { ... }
Application
Controller 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()
)
);
}
注意:不要在括号中设置任何参数。
javascriptRoutes
创建一条路线操作并将其包含在您的模板中路线 conf/routes
GET /javascriptRoutes controllers.Application.javascriptRoutes
查看 <head>
/views/main.scala.html
的一部分
<script type="text/javascript" src='@routes.Application.javascriptRoutes()'></script>
从现在开始,您可以在 JS 中使用路由来获取正确的路径,而无需指定 url
和 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
使用正确的方法规则id
记录(或其他参数)到GET
或 PUT
(或其他方法)使用 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({});
关于javascript - Play 2.x : How to make an AJAX request with a common button,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11133059/
我是一名优秀的程序员,十分优秀!