我有一个html页面发送CGI请求(通过IIS服务器托管)。
这很有效。
HTML页面
<html>
<head>
<script src="js/jquery-1.11.0.js">
</script>
<script src="sample.js"></script>
</head>
<body>
<form id="slam" action= "http://localhost/Dev/SIAS/slam/siscgi.exe" >
<input type="submit" value="Submit" id="B1">
<input type="hidden" name="request" value="sample">
<input type="hidden" name="format" value="xml">
</form>
</body>
</html>
sample.js
$(document).ready(function () {
var siscgi = $("#slam").attr('action');
$("#B1").click(function (evt) {
var data= $("#slam").serialize();
$.post(siscgi,data,
function(data,status){
});
});
});
我正在尝试删除隐藏的输入字段,而是直接将它们作为javascript中的附加数据传递,如下所示:
sample.js
$(document).ready(function () {
var siscgi = $("#slam").attr('action');
$("#B1").click(function (evt) {
var data= {request : "sample", format : "xml"};
$.post(siscgi,data,
function(data,status){
});
});
});
此操作失败,因为服务器(通过siscgi.exe)发送错误信息表示缺少参数 - 请求和格式化参数未被发送。
结果是需要在浏览器中显示的xml树。
任何人都可以告诉我,如何解决这个问题?
答案 0 :(得分:0)
您的按钮仍然是表单中的提交按钮,因此其默认操作会导致它被提交,并且在您的ajax帖子获得回复之前替换该页面。它似乎只在第一种情况下工作,因为您使用ajax提交的数据与默认操作提交的数据之间没有区别。您实际上每次都要提交表单两次,您应该可以通过检查服务器日志来证明这一点。
在第二个版本中,您仍然发送2个请求,而您看到的响应是没有必填字段的请求。
evt.preventDefault()
应该修复它。