2015-10-13 86 views
1

我想通過POST將列表菜單中的html變量傳遞給perl腳本,但是會發生的是,jQuery ajax()能夠執行perl,而不包括從document.getElementById獲得的值。這是我的HTML代碼:如何通過AJAX將html表單變量傳遞給perl腳本?

<form id="form"> 
    <p id="survey"> 
     <label for="list"><b>Ran survey</b></label> 
    </p> 
    <p> 
     <label for="division">Please select division:</label> 
      <select type="list" id="list" name="division"> 
       <option>--Select One--</option> 
       <option value="DENVER">Denver</option> 
       <option value="PHOENIX_SOUTHWEST">Phoenix-Southwest</option> 
       <option value="PORTLAND">Portland</option> 
       <option value="SOUTHERN_HOUSTON">Southern-Houston</option> 
       <option value="NORCAL">Norcal</option> 
       <option value="SEATTLE">Seattle</option> 
       <option value="VONS_SoCal">Vons-Socal</option> 
       <option value="EASTERN">Eastern</option> 
      </select> 
     </p> 
     <p id="survey"> 
      <input type="submit" value="Ran Survey" onclick="surveyFunction();" /> 
     </p> 
    </form> 
function surveyFunction() { 
    var div = document.getElementById("list").value; 
    $.ajax({ 
     type: "POST", 
     url: "possurv.pl", 
     data: div, 
     success: function(result){ 
      $('#survfeedback').html(result); 
     } 
    }); 
} 
+0

我們需要看到的相關部分Perl程序或它的文檔來回答這個問題而不用猜測。 – simbabque

+0

我很驚訝這個設法執行Perl,因爲XHR請求應該被表單提交取消。 – Quentin

回答

2

您需要在查詢字符串參數名稱來分配值。我認爲這應該遵循作爲控制名稱的標準做法。在這種情況下,你可以建立查詢字符串自己:

data: 'division=' + encodeURIComponent(div), 

,也可以送一個對象,讓jQuery的是序列化到一個查詢字符串爲您:

data: { division: div }, 
+1

您忘記將'encodeURIComponent'應用於您的手動嘗試的用戶輸入。 – Quentin

+0

誰說Perl程序要求輸入是'application/x-www-form-urlencoded'類型的?可能只是檢查請求體,並不期望命名參數。 – simbabque

+2

@simbabque - 這將是一個非常奇怪的邊緣情況。期望Perl採用application/x-www-form-urlencoded數據是一個合理的假設。 – Quentin