2014-03-04 81 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