php-在AJAX调用中读取POST数据

我有一些通过Ajax调用不断更改的Session值.我似乎无法获得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]

我想这归结为只是正确地读取并正确处理了该字符串,如果发送了多个字符串,则会多次读取.正确?

解决方法:

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
上一篇:internet-explorer-如何将javascript变量作为参数传递给vbscript函数(在HTA中)?


下一篇:javascript-单元格范围上的Google Spreadsheet Script RegEx