use*_*177 59 javascript java ajax routes playframework-2.0
所以我之前已成功获得ajax请求,但我总是不得不使用表单,然后在提交结束时返回false,以便它不刷新页面.
我最近刚刚将我的javascript移动到一个单独的文件中,这导致我的@命令失败.因此,我不知道如何将我的网址设置为我的路线?
HTML:
<button id="saveAsDefaultButton">Save as default</button>
Run Code Online (Sandbox Code Playgroud)
Playframework java代码:
public static Result saveDefaultPhoneForUser(String handset) {
User currentUser = User.findByName(session("name"));
currentUser.lastControlledHandset = theHandset;
currentUser.save();
return ok();
}
Run Code Online (Sandbox Code Playgroud)
路线:
POST / controllers.Application.saveDefaultPhoneForUser(handset : String)
Run Code Online (Sandbox Code Playgroud)
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;
});
Run Code Online (Sandbox Code Playgroud)
我确定有办法做到这一点我只是没有运气找到任何东西.任何帮助都很大的帮助.
bie*_*ior 123
对于这项工作,您应该使用javascriptRoutes它,因为它根据您的routes.conf生成正确的JS路径.您将在Zentask 示例中找到使用示例
无论如何,现在你可以通过改变urlto 来修复你的AJAX调用
url : '@routes.Application.saveDefaultPhoneForUser()',
Run Code Online (Sandbox Code Playgroud)
这种方式要求它将整个JS放在模板中,这是错误的.它甚至可以移动到单独的JS文件,并使您可以使用javascriptRoutes.
更多...
javascriptRoutes 尚未在官方文档中描述,但这里是逐步介绍它.虽然描述看起来很复杂但事实上使用这种方式带来了很多好处.
首先,您需要在conf/routes文件中创建公共路由:
GET /item/:id controllers.Application.getItem(id: Long)
POST /item/new controllers.Application.newItem
PUT /item/:id controllers.Application.updateItem(id: Long)
Run Code Online (Sandbox Code Playgroud)
当然,您需要在Application控制器中至少创建这三个动作:
getItem(Long id){ ... }newItem() { ... }updateItem(Long id) { ... }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()
)
);
}
Run Code Online (Sandbox Code Playgroud)
注意:不要在括号中设置任何参数.
javascriptRoutes操作路线并将其包含在模板中路线 conf/routes
GET /javascriptRoutes controllers.Application.javascriptRoutes
Run Code Online (Sandbox Code Playgroud)
查看<head>部分内容/views/main.scala.html
<script type="text/javascript" src='@routes.Application.javascriptRoutes()'></script>
Run Code Online (Sandbox Code Playgroud)
从现在开始,您可以使用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;
});
Run Code Online (Sandbox Code Playgroud)
你可以使用简化版(myJsRoutes从第2点开始):
myJsRoutes.controllers.Application.getItem(idToGet).ajax({
success : function(data) { ... some code ... }
});
Run Code Online (Sandbox Code Playgroud)
要么
myJsRoutes.controllers.Application.newItem().ajax({
success : function(data) { ... some code ... }
});
Run Code Online (Sandbox Code Playgroud)
等等...
type: "POST"- JS路由器将根据conf/routes规则使用正确的方法id记录(或其他参数)GET或PUT(或其他方法)routes-like路线:
GET /some/:a/:b/:c controllers.Application.getABC(a: String, b: Integer, c: String)
Run Code Online (Sandbox Code Playgroud)
JS:
myJsRoutes.controllers.Application.getABC("a", 1, "b" ).ajax({});
Run Code Online (Sandbox Code Playgroud)
我喜欢"老好"的简单方法:
1在页面中,使用JQuery,
在一些偶数处理程序中
$.get('/giveme', {'arg': value}, function(data) {
window.alert(data);
}
);
Run Code Online (Sandbox Code Playgroud)
2在服务器/播放侧
2.1路线: GET /giveme controllers.Application.giveme(arg)
2.2 scala动作:
object Application extends Controller {
def giveme(arg:String) = Action {
Ok(Json.toJson("hello," + arg ))
}
}
Run Code Online (Sandbox Code Playgroud)
在打电话时需要注意的事项
Routes.javascriptRouter("myJsRoutes",
Run Code Online (Sandbox Code Playgroud)
路线是从play.Routes导入的,而不是play.api.Routes
我实现这段代码时出错了,因为我认为它会来自api(显然我错了).除此之外,一切都很棒〜!!
| 归档时间: |
|
| 查看次数: |
35875 次 |
| 最近记录: |