2015-10-13 87 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

相关问题