我需要向服务器提交数据(使用带表单的帖子)并捕获返回状态,以便我可以返回解决方案或拒绝。我不能使用ajax来请求XMLHttpRequest。我想知道如何提交表单并返回一个承诺(如@someKittens answer on the promise constructor')。 custom.js:
var myfunction =
{
submitForm: function()
{
// Create form
var form = document.createElement('form');
form.setAttribute('action', 'server.php');
form.setAttribute('method', 'POST');
var input1 = document.createElement('input');
input1.setAttribute('type', 'hidden');
input1.setAttribute('name', 'params');
input1.setAttribute('id', 'params');
input1.setAttribute('value', 'myvalue');
form.appendChild(input1);
// Create iframe and append form to it
var $frame = $('<iframe style="width:500px;height:400px;display:none;">');
$('body').html( $frame );
setTimeout( function(){
var doc = $frame[0].contentWindow.document;
var $body = $('body',doc);
$body.html(form);
// submit form
$(form).submit();}, 1 );
}
}
index.html:
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script src="custom.js"></script>
</head>
<body>
<script>
myfunction.submitForm().done(function () {
alert('It works');
}).fail(function () {
alert('Failed');});
</script>
</body>
</html>
由于
答案 0 :(得分:1)
使用javascript无法做到这一点。表单提交会向服务器创建一个新请求,因此您将被定向到另一个页面而不是您所在的页面,在这种情况下它是'server.php'
,而'server.php'
反过来将处理请求并返回响应,就像任何一个服务器上的其他页面。由'server.php'
为了跟踪服务器的状态,您可以从<%= form_for([@request, @work]) do |f| %>
<% if @request.type == "StaffRequest" %>
<%= (f.hidden_field :performer_type, value: "Employee") %>
<%= (f.collection_select :performer_id, Employee.all, :id, :name) %>
<% elsif @request.type == "CarRequest" %>
<%= (f.hidden_field :performer_type, value: "Car") %>
<%= (f.collection_select :performer_id, Car.all, :id, :select_info) %>
<% end %>
<%= f.submit 'OK' %>
<% end %>
返回到请求页面,并在返回的URL中使用查询字符串,或者将数据添加到服务器会话中并在重新启动时捕获它们这页纸。