我有一些Session值,我通过Ajax调用不断更改。我似乎无法处理POST数据以处理它并设置值。
我在这里传递的是一个字符串数组,如下面的代码所示。
这是AJAX调用的地方:
var sessionValues = [];
str = {"PID": "1", "Level": "Main", "MenuName": "Kitchen", "State": "CHECKED"}
sessionValues.push(str);
var postObj = {"sessionData": sessionValues};
$.ajax({
type: 'POST',
data: {'data': postObj},
url: 'setSession.asp'
}).done(function(response){
console.log(response);
})
我在程序的PHP版本中工作正常但我的ASP版本没有抓取数据。这是我的PHP版本和ASP版本,因为我可以转换它。
<-- php setSession.php works fine -->
$data = $_POST['data'];
foreach ($data['sessionData'] as $key => $value) {
$projectProduct = "1";
$level = $value["Level"];
$menuName = $value["MenuName"];
$state = $value["State"];
$_SESSION['PID:'.$projectProduct][$level][$menuName]['menu_state'] = $state;
echo "[PID:".$projectProduct."][".$level."][".$menuName."][".$state."]<br>";
}
0 =>>>>> Array<br>[PID:1][Main][Kitchen][CHECKED]
这里我想在ASP中做同样的事情
' setSession.asp
data = Request.Form("data")
For Each part In data("sessionData")
projectProduct = part("PID")
level = part("Level")
menuName = part("MenuName")
state = part("State")
Session("PID:" & projectProduct).Item(level).Item(menuName).Remove("menu_state")
Session("PID:" & projectProduct).Item(level).Item(menuName).Add "menu_state", state
response.write("[PID:" & projectProduct&"]["&level&"]["&menuName&"]["&state&"]<br>")
Next
输出空白
看起来它从来没有任何数据,但不会抛出任何错误。我正确地读了POST对象吗?
[编辑]
这是从Fiddler捕获的RAW POST数据:
data%5BsessionData%5D%5B0%5D%5BPID%5D=1&data%5BsessionData%5D%5B0%5D%5BLevel%5D=Main&data%5BsessionData%5D%5B0%5D%5BMenuName%5D=Kitchen&data%5BsessionData%5D%5B0%5D%5BState%5D=CHECKED
这里我在该字符串上使用了URL解码 -
data[sessionData][0][PID]=1&data[sessionData][0][Level]=Main Level Plan&data[sessionData][0][MenuName]=Kitchen&data[sessionData][0][State]=CHECKED
这看起来我应该能够通过使用
来遍历字符串For Each part In Request.Form("data[sessionData]")
但没有任何反应。我添加了一个简单的循环来查看request.form,这是它所看到的:
for each x in Request.Form
Response.Write(x)
Next
' outputs -> data[sessionData][0][PID]data[sessionData][0][Level]data[sessionData][0][MenuName]data[sessionData][0][State]
我想这归结为只是正确读取和处理该字符串,如果发送了多个字符串,则为多个。正确?
答案 0 :(得分:3)
RAW输出肯定有助于解决正在发生的事情。
jQuery正在将JSON结构转换为HTTP POST参数,但在此过程中,它会创建一些过于复杂的密钥名称。
如果你分解键值对,你会有类似
的东西data[sessionData][0][PID]=1
data[sessionData][0][Level]=Main Level Plan
data[sessionData][0][MenuName]=Kitchen
data[sessionData][0][State]=CHECKED
就Classic ASP而言,这只是一个字符串键和值对的集合,仅此而已。
找出这些关键字的正确方法是做你在问题中所做的事情,但有一些小的改动。
For Each x In Request.Form
Response.Write(x) & "=" & Request.Form(x) & "<br />"
Next
当以HTML格式输出时,它看起来与上面显示的细分类似。
了解密钥是什么,您应该能够直接从Request.Form()
集合中引用它们。
Dim pid: pid = Request.Form("data[sessionData][0][PID]")
Response.Write pid
输出:
1