如何传递不在 URL 中的多个参数?

Posted

技术标签:

【中文标题】如何传递不在 URL 中的多个参数?【英文标题】:How to pass multiple parameters not in the URL? 【发布时间】:2018-08-06 19:49:36 【问题描述】:

目前表单数据通过 URL 传递,如下所示。

document.getElementById('newChildForm').action = "./populateImageProcessing?personId="+ temp+ "&category="+ strUser+ "&fromDate="+ frmDate+ "&toDate=" + toDate+"&advFromDayID="+advFromDayID+"&advFromMonthID="+advFromMonthID+"&advFromYearID="+advFromYearID+"&advToDayID="+advToDayID+"&advToMonthID="+advToMonthID+"&advToYearID="+advToYearID;

document.getElementById('newChildForm').submit();

我想单独传递表单数据,而不是通过 URL。

我用 ajax/jQuery 尝试了下面的方法

$.ajax(
        cache: false,
        url : "./populateImageProcessing",
        type : "POST",
        data : "personId=" + temp + "&category="
                    + strUser
                    + "&fromDate="+ frmDate+ "&toDate=" + toDate+ "&advFromDayID="+advFromDayID+"&advFromMonthID="+advFromMonthID+"&advFromYearID="+advFromYearID+"&advToDayID="+advToDayID
                    +"&advToMonthID="+advToMonthID+"&advToYearID="+advToYearID,
success: function(data)
$("#newChildForm").html(data); 

 ); 

jQuery 在 SIT 环境中工作,但由于 CSP,我在 UAT 环境中遇到了一些麻烦。

有没有什么办法可以使用纯javascriptdocument.getElementById('newChildForm').action="./populateImageProcessing",并单独传递参数,而不是在URL中。

请帮忙。谢谢。

【问题讨论】:

CSP 与此有什么关系?如果您不想要 URL 中的参数,那么 POST 确实是唯一可行的选择;但我们甚至不知道您的服务器端组件是否想要接受 POST 数据。像在第一个代码 sn-p 中那样以如此丑陋的方式创建该 URL 的替代方法是用值填充隐藏的表单字段,然后提交表单。 【参考方案1】:

试试这个代码:

var data = "personId=" + temp + "&category="+ strUser+ "&fromDate="+ frmDate+ "&toDate=" + toDate+ "&advFromDayID="+advFromDayID+"&advFromMonthID="+advFromMonthID+"&advFromYearID="+advFromYearID+"&advToDayID="+advToDayID+"&advToMonthID="+advToMonthID+"&advToYearID="+advToYearID;

var xhttp= new XMLHttpRequest();

xhttp.open("POST", "populateImageProcessing", true);

xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

xhttp.onreadystatechange = function() 
        if (this.readyState == 4 && this.status == 200) 
            document.getElementById('newChildForm').innerHTML = this.responseText
       
    ;

xhttp.send(data); 

【讨论】:

我试过这个,但是数据不显示。我想也许我应该提交表格,所以我跟进了你的部分:document.getElementById('newChildForm').submit();它抛出 404 错误。但是,如果我单击浏览器后退按钮,则会显示结果。我希望在单击搜索按钮时显示结果。 我猜,问题出在 populateImageProcessing 文件中。 检查 populateImageProcessing 文件中的重定向,您确定没有文件类型(如 .php 或 .asp )的 url 正确吗?【参考方案2】:

你试过这样的吗? Json 是传递多个参数的好方法。

var obj =  personId: temp, category: strUser, fromDate: frmDate, toDate: toDate, advFromDayID :advFromDayID, advFromMonthID: advFromMonthID, advFromYearID: advFromYearID, advToDayID: advToDayID, advToMonthID: advToMonthID, advToYearID: advToYearID ;
$.ajax(
    cache: false,
    url: "./populateImageProcessing",
    type: 'POST',
    data: JSON.stringify(obj),
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    success: function(data)
        $("#newChildForm").html(data); 
    
);

但我不知道你是否可以在“服务器”端处理它? 告诉我。希望对您有所帮助。

【讨论】:

谢谢。我希望避免使用 jQuery/Ajax。如果我可以提交表单,而不是在 URL 中传递参数,那将非常有帮助

以上是关于如何传递不在 URL 中的多个参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 URL 中传递多个参数?

Scrapy中的Callback如何传递多个参数

如何使用 s-s-rS 中的 URL 访问传递带有特殊字符的多个参数

CI中如何在路径中传递多个参数

如何使用 JavaScript 将包含多个数组的数组作为参数化 URL 传递

Next js - 如何在 url 中为 api 传递多个参数?