使用 javascript 在 ajax 请求中发送多个参数
Send multiple parameter in ajax request using javascript
所以我想使用ajax请求,我知道如何使用它。
但是我遇到的问题是我想将参数传递给请求。所以我的第一页有 4 个参数,然后我像这样构建 url,
var url = "./ControllerServlet?PAGE_ID=BPCLA&ACTION=closeAssessment&SAVE_FLAG=true&closeReason="+closeReasonStr+"&closeCmt="+closeCmt;
但现在参数正在增加,就像现在我还有 20 个一样。所以现在像这样构建网址将是混乱的方法。有没有更好的方法可以做到这一点。
这是我的函数,我在javascript函数中构建URL。
function closeAssessment() {
var closeReason = document.getElementById("SectionClousureReason");
var closeReasonStr = closeReason.options[closeReason.selectedIndex].value;
var closeCmt=document.getElementById("SectionCloseAssessmentCmt").value;
var url = "./ControllerServlet?PAGE_ID=BPCLA&ACTION=closeAssessment&SAVE_FLAG=true&closeReason="+closeReasonStr+"&closeCmt="+closeCmt;
ajaxRequest(url);
return;
}
编辑:
正如你问的,这是我的ajaxRequest函数,
function ajaxRequest(url) {
strURL = url;
var xmlHttpRequest = false;
var self = this;
// Mozilla, Safari
if (window.XMLHttpRequest) {
self.xmlHttpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
self.xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
self.xmlHttpRequest.open("POST", strURL, true);
self.xmlHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
self.xmlHttpRequest.onreadystatechange = function() {
if (self.xmlHttpRequest.readyState == 4) {
if (self.xmlHttpRequest.status == 200) {
var htmlString = self.xmlHttpRequest.responseText;
var parser = new DOMParser();
var responseDoc = parser.parseFromString(htmlString, "text/html");
window.close();
} else {
ajaxFailedCount++;
// Try for 1 min (temp fix for racing condition)
if (ajaxFailedCount < 1200) {window.setTimeout(function() {ajaxRequest(url)}, 50);}
else {alert("Refresh failed!")};
}
}
}
self.xmlHttpRequest.send(null);
}
您可以创建一个对象,其中键/值对是您想要添加到 URL 的内容。
var closeReason = document.getElementById("SectionClousureReason");
var params = {
PAGE_ID: 'BPCLA',
ACTION: 'closeAssessment',
SAVE_FLAG: 'true',
closeReasonStr: closeReason.options[closeReason.selectedIndex].value,
closeCmt: document.getElementById("SectionCloseAssessmentCmt").value
};
然后通过循环将它们添加到 URL。
var url = "./ControllerServlet?";
var urlParams = Object.keys(params).map(function(key){
return encodeURIComponent(key) + '=' + encodeURIComponent(params[key]);
}).join('&');
url += urlParams;
ajaxRequest(url);
注意:我添加encodeURIComponent
只是为了安全起见。
编辑:从您的评论来看,您似乎想提交<form>
但您想使用 AJAX 来这样做。 在这种情况下,您可以循环访问表单元素并构建上述params
对象。
var params = {
PAGE_ID: 'BPCLA',
ACTION: 'closeAssessment',
SAVE_FLAG: 'true'
};
var form = document.getElementById('yourForm'),
elem = form.elements;
for(var i = 0, len = elem.length; i < len; i++){
var x = elem[i];
params[x.name] = x.value;
}
构建参数的对象,并通过如下所示的循环将它们放入 uri 中:
var values= {
page_id: 'BPCLA',
action: 'test'
},
uri_params = [],
uri = 'http://yoururl.com/file.php?';
for (var param in values) uri_params.push( encodeURIComponent( param ) + '=' + encodeURIComponent( values[ param ] ) );
uri = uri + uri_params.join( '&' );
console.log( uri );
或者考虑使用 POST 传输参数,因为许多浏览器对查询字符串都有限制。
编辑:您还可以为自己构建一个函数,该函数遍历表单并为您构建values
对象,因此您不必手动执行此操作。但请注意,任何人都可以通过在提交表单之前附加表单元素(例如使用开发人员工具)来简单地注入自定义 url 参数,因此请记住这一点。
如果你使用的是jQuery,你可以使用.serializeArray()或者看看这个答案,了解你可以使用的可能函数。
相关文章:
- 在url参数javascript中存储键值对列表
- 可选参数 JavaScript 技巧
- 如何计算参数 JavaScript 中的条件
- 未定义的变量作为函数参数 javascript
- 使用带有参数 Javascript 的函数更改全局变量
- 如何在参数JavaScript中更改对象属性
- 如何使用参数(javascript)调用Date构造函数
- 作为参数(javascript)传递的函数的系统唯一id
- Backbone.BabySiter内部参数-Javascript Scope
- 未定义函数参数-Javascript
- 谷歌地图api v3-IE7-main.js错误-无效参数(javascript)
- 通过onclick函数发送参数-Javascript
- 传递属于对象的匿名方法作为参数-Javascript
- 未捕获类型错误:没有足够的参数Javascript游戏
- 缺少)参数Javascript错误
- 在函数参数Javascript上使用toSentenceCase
- 跳过函数参数javascript
- 如何在调用不带括号的函数时传递参数 [Javascript]
- 如何传递多个参数javascript
- Foreach键和值输入参数javascript