2014-03-04 84 views
0

我有一个HTML页面发送一个CGI请求(通过IIS服务器托管)。未通过JQuery POST请求传递的其他数据

这个效果很好。

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)发送一个错误说缺少的参数 - 请求和格式PARAMS不被发送。

结果是需要在浏览器中显示的xml树。

任何人都可以让我知道,如何解决这个问题?

+0

这对我来说很好。 jQuery应该正确地处理序列化数据。查看浏览器的开发人员工具并查看哪些数据是真正发送的。请注意,第二个示例不会发送'submit = B1',这可能是一个问题。 –

+0

@FelixKling我不认为第一个会发送它 - http://jsfiddle.net/arunpjohny/WE94U/1/ –

+0

当B1的点击事件被触发时,发送POST请求。那么为什么我们需要发送提交? – user3377206

回答

0

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

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

evt.preventDefault()应该修复它。

+0

这工作,我得到运行请求。 – user3377206