gpt4 book ai didi

javascript - AJAX - 经典 ASP - 发布表单

转载 作者:行者123 更新时间:2023-11-28 06:10:01 26 4
gpt4 key购买 nike

我有一个包含以下代码的 TEST.ASP:

<HTML>
<HEAD>
<SCRIPT src="ajaxScript.js" type="text/javascript"></SCRIPT>
</HEAD>
<BODY>
<FORM action="action_page.asp" method="post">
First Name:<BR>
<INPUT type="text" name="FName"><BR>
Last Name:<BR>
<INPUT type="text" name="LName"><BR>
<INPUT type="submit" value="Submit">
<BUTTON type="button" onClick="loadXMLDoc('action_page.asp',this.form);">GoGoGo!</BUTTON>
</FORM>
<DIV id="msgBoxDiv">TEST!!</DIV>
</BODY>
</HTML>

被调用的 Javascript 文件 (ajaxScript.js) 具有以下代码:

var req; // global variable to hold request object

function processReqChange()
{
if (req.readyState == 4 && req.status == 200){document.getElementById("msgBoxDiv").innerHTML = req.responseText;}
}

function loadXMLDoc(url, params)
{
if(window.XMLHttpRequest)
{
try
{
req = new XMLHttpRequest();
} catch(e)
{
req = false;
}
}
else
{
req = false;
}

if(req)
{
var formData = new FormData(params);

req.onreadystatechange = processReqChange;
req.open("POST", url, true);
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
req.send(formData);
return true;
}
return false;
}

我的“action_page.asp”接收参数是这样的:

<%
vRF1 = request.Form("FName")
vRF2 = request.Form("LName")
%>

<HTML>
<HEAD>

</HEAD>
<BODY>
First:<%=vRF1%><BR>
Last:<%=vRF2%>
</BODY>
</HTML>

如果我进行正常提交(提交按钮),一切都会按预期进行:它会显示一个包含表单值的新页面。

但是...如果我尝试使用 AJAX(gogogo 按钮)读取目标 ASP,我无法将表单发送到目标页面。我确实收到了目标页面,但没有假定的值。我明白了:
Result page

如果我更改“req.send(formData);”对于“req.send("FName="+1+"&LName=QWER");",一切正常。

我读过要发送整个表单(就像“通常”的帖子一样),我只需要制作“var formData = new FormData(params);”其中 params 是表单对象,然后发送 FormData(params)。

我在这里可能做错了什么?

最佳答案

我不想在没有答案的情况下留下这个问题。

Lankymart 给出了正确答案的路径...事实是,当我提交“new FormData(formID)”时,我发送的是 multipart/form-data 而不是 application/x-www-form-urlencoded 作为我正在声明。

所以...我们可以做出 Lankymart 指出的假设 (application/x-www-form-urlencoded)。换句话说,你只需接受我最初的问题,并在 req.send(); 中您必须形成要传递的参数字符串(就像在 GET 请求中一样)。 “名称1=”+参数1+”&名称2=”+参数2。我选择了这个,因为对于我的需要来说,这已经足够了。

或者...如果我们确实需要/希望发送表单 - req.send(formData)... 这将生成一个 multipart/form-data (在此处查看 multipart/form-data 的格式示例: http://www.codeproject.com/Articles/1125/Advanced-ASP-Uploader )在这种情况下......您必须为信息构建一个解析器。这是我编写的代码(只是为了尝试一两件事):

Function StoreNameAndValues(tempVarArray)
Dim tempVar

for i = 1 to ubound(tempVarArray)-1
if tempVarArray(i)<>"" then
tempVar=Split(tempVarArray(i), """")

if ubound(tempVar)>1 then
postNamesArray(i-1)=tempVar(1)
postValuesArray(i-1)=StripString(tempVar(2),CHR(13)&CHR(10))
End if
End if
next
End Function


tempVar=Request.TotalBytes
tempVar1=Request.BinaryRead(tempVar)

tempVar1=SimpleBinaryToString(tempVar1)

separator=Split(tempVar1, CHR(13)&CHR(10))(0)
tempVar2=Split(tempVar1,separator)

postArgumentsSize=ubound(tempVar2)-1
Dim postNamesArray()
Dim postValuesArray()
ReDim Preserve postNamesArray(postArgumentsSize)
ReDim Preserve postValuesArray(postArgumentsSize)

StoreNameAndValues(tempVar2)

在这个例子中,我构建了一个非常基本的解析器...它没有为文件上传之类的事情做好准备,但这只是一个示例。

希望我没有犯任何大错误......这会对某人有所帮助。

关于javascript - AJAX - 经典 ASP - 发布表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36489995/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com