node.js & jade - 发出 post 请求并在同一页面中显示结果而不重定向
node.js & jade - making a post request and displaying the results in the same page without redirecting
我有 node.js 快速 Web 应用程序,它在单击按钮时执行 CRUD 操作。在这里,我需要根据用户的输入更新一条记录。为此,我需要输入用户的详细信息,在同一页面中显示记录的现有值,并提示用户是否要更改数据。
如果是,那么我需要输入用户的值并更新它。是否可以将它放在一个 jade 文件中,我从用户那里获取输入值。
玉文件:
extends ../layout
block content
.page-header
h3 Updation
form.form-horizontal(role='form', method='POST')
h4 Enter the employee id for which you want to update the details
input(type='hidden', name='_csrf', value=_csrf)
.form-group
label(class='col-sm-2 control-label', for='empid') Emp ID
.col-sm-2
input.form-control(type='text', name='empid', id='empid', autofocus=true)
.form-group
.col-sm-offset-2.col-sm-2
button.btn.btn-primary(type='submit')
i.fa.fa-pencil
| Get details
我有这个文件,我从用户那里获取员工 ID 并发出 post 请求。我不确定如何呈现对同一页面本身的响应并提示更改详细信息。
如有任何帮助,我们将不胜感激。
是的,您可以这样做,但不能使用提交的表单,因为那样您的页面就会消失。
相反,您可以在页面中插入一个向后端发出 AJAX 请求的按钮,并且在 AJAX 请求的 return 上,您可以动态替换某些部分您页面的 returned 数据。当然,您可以在 AJAX 请求中包含用户输入的任何数据。
由于您希望这一切都发生在前端,因此您不能在 Jade 中执行此操作。相反,您需要在您的页面中添加一个脚本,以在客户端的浏览器中执行您想要的操作。
下面是一个如何实现这个的例子:
将其放入名为 ajax.jade:
的文件中
mixin ajaxFunction
script.
function changeState(url, buttonid) {
$.ajax({url: url}).done(function (data) {
$('#' + buttonid).parent().html(data);
});
}
mixin ajaxButton(id, url, buttonLabel)
a.btn.btn-primary.btn-xs.btn-block(id='#{id}',
href='javascript:changeState(\'#{url}\', \'#{id}\')') #{buttonLabel}
现在您可以将此 mixin 放在页面的任何位置。 (确保按钮 ID 在整个页面中是唯一的,并且不包含空格!)。单击时,它将自己替换为任何后端 returned:
include ajax
+ajaxButton("myButton", "/some/url", "Klick me!")
不确定 jade 引擎是否可以部分渲染 jade 模板,如果有一种方法,通常可以使用 Ajax 来实现。
表单添加提交事件监听器,其中可以设置event.preventDefaut() 停止默认提交过程,这样可以防止页面重新加载。
我有 node.js 快速 Web 应用程序,它在单击按钮时执行 CRUD 操作。在这里,我需要根据用户的输入更新一条记录。为此,我需要输入用户的详细信息,在同一页面中显示记录的现有值,并提示用户是否要更改数据。
如果是,那么我需要输入用户的值并更新它。是否可以将它放在一个 jade 文件中,我从用户那里获取输入值。
玉文件:
extends ../layout
block content
.page-header
h3 Updation
form.form-horizontal(role='form', method='POST')
h4 Enter the employee id for which you want to update the details
input(type='hidden', name='_csrf', value=_csrf)
.form-group
label(class='col-sm-2 control-label', for='empid') Emp ID
.col-sm-2
input.form-control(type='text', name='empid', id='empid', autofocus=true)
.form-group
.col-sm-offset-2.col-sm-2
button.btn.btn-primary(type='submit')
i.fa.fa-pencil
| Get details
我有这个文件,我从用户那里获取员工 ID 并发出 post 请求。我不确定如何呈现对同一页面本身的响应并提示更改详细信息。
如有任何帮助,我们将不胜感激。
是的,您可以这样做,但不能使用提交的表单,因为那样您的页面就会消失。
相反,您可以在页面中插入一个向后端发出 AJAX 请求的按钮,并且在 AJAX 请求的 return 上,您可以动态替换某些部分您页面的 returned 数据。当然,您可以在 AJAX 请求中包含用户输入的任何数据。
由于您希望这一切都发生在前端,因此您不能在 Jade 中执行此操作。相反,您需要在您的页面中添加一个脚本,以在客户端的浏览器中执行您想要的操作。
下面是一个如何实现这个的例子:
将其放入名为 ajax.jade:
的文件中mixin ajaxFunction
script.
function changeState(url, buttonid) {
$.ajax({url: url}).done(function (data) {
$('#' + buttonid).parent().html(data);
});
}
mixin ajaxButton(id, url, buttonLabel)
a.btn.btn-primary.btn-xs.btn-block(id='#{id}',
href='javascript:changeState(\'#{url}\', \'#{id}\')') #{buttonLabel}
现在您可以将此 mixin 放在页面的任何位置。 (确保按钮 ID 在整个页面中是唯一的,并且不包含空格!)。单击时,它将自己替换为任何后端 returned:
include ajax
+ajaxButton("myButton", "/some/url", "Klick me!")
不确定 jade 引擎是否可以部分渲染 jade 模板,如果有一种方法,通常可以使用 Ajax 来实现。 表单添加提交事件监听器,其中可以设置event.preventDefaut() 停止默认提交过程,这样可以防止页面重新加载。