使用JQuery POST请求未传递其他数据

时间:2014-03-04 02:35:19

标签: jquery

我有一个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树。

任何人都可以告诉我,如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您的按钮仍然是表单中的提交按钮,因此其默认操作会导致它被提交,并且在您的ajax帖子获得回复之前替换该页面。它似乎只在第一种情况下工作,因为您使用ajax提交的数据与默认操作提交的数据之间没有区别。您实际上每次都要提交表单两次,您应该可以通过检查服务器日志来证明这一点。

在第二个版本中,您仍然发送2个请求,而您看到的响应是没有必填字段的请求。

evt.preventDefault()应该修复它。