【发布时间】:2014-08-28 07:31:12
【问题描述】:
好的,使用 Scala Play Framework 我的应用程序控制器中有一个 Action 方法,它访问特定序列的数据库并使用 Ok(json) 发送 JSON 对象,可以通过路由 GET /json/:serial controllers.Application.getData(serial: String) 访问。这部分有效;我能够直接通过 localhost/json/serial# 检索特定序列号的未格式化 JSON 对象。
在我看来,有一个页面用于编辑这个数据库信息。有一个带有序列号列表的 HTML 选择下拉列表,当其中一个被选中时,我想发送一个带有该序列号的 AJAX 请求到 /json/### 并获得一个 JSON 对象作为回报。一旦我有了 JSON 对象,表单应该填充该信息,以便用户知道他们正在编辑什么。
所以本质上我的问题是如何使用 AJAX/jQuery 通过 HTTP 请求 JSON 对象(使用路由 /json/:serial),以便在串行时使用 JSON 对象中的各种字段填充 HTML 表单从下拉列表中选择?
如果有什么不清楚或太模棱两可,请告诉我!谢谢
编辑:一些代码:
val getData(serial: String) = Action {
val scInfo = *some database query*
val ctrlInfo = *another database query*
val json: JsValue = Json.obj(
"name" -> scInfo(0)._1,
"notes" -> scInfo(0)._2,
"ctrl1" -> Json.obj("name" -> scInfo(0)._3,
"port" -> scInfo(0)._4,
"apc" -> scInfo(0)._5),
"ctrl2" -> Json.obj("name" -> ctrlInfo(0)._1,
"port" -> ctrlInfo(0)._2,
"apc" -> ctrlInfo(0)._3),
"rack" -> scInfo(0)._6,
"comtrol" -> scInfo(0)._7
)
Ok(json)
}
这是表单大致外观的图片(我认为查看实际页面比阅读标记更容易)
因此,选择存储中心时,通过Ajax将该数字发送到/json/:serial并应要求json对象,然后填充表单中的其他字段。
编辑 2:
这是视图的标记。它使用 Play 模板引擎,因此前面带有 @ 的任何东西都只是生成 scala 代码的标记。
<div class="header-wrapper">
<h2 class="header">Edit Information for...</h2>
</div>
<div class="sc-content">
<form class="form-horizontal col-md-12" role="form">
<div class="form-group">
<label for="inputSC" class="control-label">Storage Center</label><br>
<div class="col-sm-6">
<select class="form-control" onfocus="this.blur()" id="inputSC" placeholder=" ">
@storageCenters.map { sc =>
<option id="selectSC@sc._1">@{sc._1.replace('-', '/')}</option>
}
</select>
</div>
</div>
<div class="form-group">
<label for="inputRack" class="control-label">Rack</label><br>
<div class="col-sm-6">
<select class="form-control" onfocus="this.blur()" id="inputRack" placeholder=" ">
@racks.map { rack =>
<option id="selectRack@rack.name">@rack.name</option>
}
</select>
</div>
</div>
<div class="form-group">
<label for="inputConsoleIP" class="control-label">Console IP/Port</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="inputConsoleIP" placeholder="i.e. 127.0.0.1">
</div>
</div>
<div class="form-group">
<div class="col-sm-10">
<input type="text" class="form-control" id="inputPort" placeholder="i.e. 00000">
</div>
</div>
<div class="form-group">
<label for="inputAPC" class="control-label">APC Outlet</label><br>
<div class="col-sm-6">
<input type="text" class="form-control" id="inputAPC" placeholder="i.e. 12">
</div>
</div>
<div class="form-group">
<label for="inputNotes" class="control-label">Notes</label><br>
<div class="col-sm-12">
<input type="text" class="form-control" id="inputNotes" value="Default">
</div>
</div>
<div class="form-group">
<div style="margin-lefT:4%;">
<button type="submit" class="btn btn-default">Submit Changes</button>
</div>
</div>
</form>
</div>
【问题讨论】:
-
显示有问题的代码,目前这只是一个模糊的问题。
-
@abc123 我添加了控制器方法和渲染标记后的表单图片
-
啊,这个问题真的很简单。你在用
knockout.js吗?最后你可以编辑前端(客户端)代码吗?因为如果可以的话,您只是在谈论jquery中的.change事件绑定,然后在success上调用ajax来填写表格。 -
查看真正的前端标记比图像更有帮助,但如果您可以提供标记,请保留两者
-
@abc123 是的,这应该很简单,我只是在网上找不到任何好的示例/解释,而且我对 Web 开发还很陌生。我刚刚使用前端标记进行了另一次编辑,但不,我没有使用 knockout.js,只是引导框架(css 和 js)以及一些自定义脚本。
标签: jquery ajax json http playframework