Php 在AJAX调用中读取POST数据

Php 在AJAX调用中读取POST数据,php,ajax,vbscript,asp-classic,Php,Ajax,Vbscript,Asp Classic,我有一些通过Ajax调用不断更改的会话值。我似乎无法对POST数据进行处理并设置值 我在这里传递给它的是一个字符串数组,如下面的代码所示 这里是AJAX调用的地方: var sessionValues = []; str = {"PID": "1", "Level": "Main", "MenuName": "Kitchen", "State": "CHECKED"} sessionValues.push(str); var postObj = {"sessionData": sessionVa

我有一些通过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版本,我尽可能将其转换为最佳版本


$data=$_POST['data'];
foreach($data['sessionData']作为$key=>$value){
$projectProduct=“1”;
$level=$value[“level”];
$menuName=$value[“menuName”];
$state=$value[“state”];
$\会话['PID:'.$projectProduct][$level][$menuName]['menu\U state']=$state;
echo“[PID:”.$projectProduct.][“$level.][“$Menuame.][“$state.]
”; } 0=>>>>数组
[PID:1][Main][Kitchen][CHECKED]
在这里,我想在ASP中做同样的事情

“setSession.asp
数据=请求表(“数据”)
对于数据中的每个部分(“sessionData”)
项目产品=零件(“PID”)
级别=零件(“级别”)
menuName=部分(“menuName”)
状态=部分(“状态”)
会话(“PID:”&projectProduct).项(级别).项(菜单名).删除(“菜单状态”)
会话(“PID:”&projectProduct).项目(级别).项目(菜单名).添加“菜单状态”,状态
响应。写入(“[PID:&projectProduct&”][”&level&“][”&Menuame&“][”&state&“]
”) 下一个
输出空白

它看起来从来没有任何数据,但不会抛出任何错误。我是否正确读取POST对象

[编辑]

以下是从Fiddler捕获的原始POST数据:

data%5BsessionData%5D%5B0%5D%5pid%5D=1和data%5BsessionData%5D%5B0%5D%5BLevel%5D=Main和data%5BsessionData%5D%5B0%5D%5bMenuame%5D=Kitchen和data%5BsessionData%5D%5B0%5D%5BState%5D=选中
在这里,我对该字符串使用了URL解码-

data[sessionData][0][PID]=1和data[sessionData][0][Level]=主层平面图和数据[sessionData][0][MenuName]=厨房和数据[sessionData][0][State]=选中
看起来我现在应该可以通过使用

用于Request.Form中的每个部分(“数据[sessionData]”)
但什么也没发生。我添加了一个简单的循环来查看request.form,下面是它看到的内容:

用于请求表格中的每个x
响应。写入(x)
下一个
'输出->数据[sessionData][0][PID]数据[sessionData][0][Level]数据[sessionData][0][Menuame]数据[sessionData][0][State]

我猜这归根结底就是正确地读取和处理该字符串,或者如果发送了多个字符串,则是多个字符串。对吗

原始输出肯定有助于了解发生了什么

现在的情况是,jQuery正在将JSON结构转换为HTTPPOST参数,但在此过程中,它会创建一些过于复杂的键名

如果分解键-值对,则有如下内容

data[sessionData][0][PID]=1
数据[sessionData][0][Level]=主平面图
数据[sessionData][0][Menuame]=厨房
数据[sessionData][0][State]=已选中
就经典ASP而言,这只是字符串键和值对的集合,仅此而已

找出这些关键点的正确方法是按照你在问题中所做的去做,但要做一些小的改动

For Each x In Request.Form
    Response.Write(x) & "=" & Request.Form(x) & "<br />"
Next
输出:

1

如果我们能看到原始HTTP帖子被发送到ASP页面,这会有所帮助,你能用Fiddler捕获吗?这就是Fiddler发送的所有内容-响应字节(按内容类型)--------~headers~:252 text/html:20,这是Fiddler的第一行-请求计数:1字节发送:1446(标题:1240;正文:206)收到的字节数:272(标题:252;正文:20),这只是“统计”选项卡,要查看原始请求和响应,请打开“检查器”选项卡,在底部面板中选择“原始”,然后将该内容复制并粘贴到一个代码块(
{}
)中,并向问题添加,不要尝试在注释中发布它。要记住的一点是VBScript代码不使用方括号-没有用方括号编写的命令、函数或运算符。(您可以在自己的变量名中使用方括号,但它们与任何其他字符一样:它们不会神奇地将变量放入数组中。)因此,如果您发现自己编写的方括号没有括在引号中,则很有可能,您犯了一个错误。仍然无法访问通过引用传递给键名的其他值,如此响应。写入(“级别=>”&部分[“级别”])。抛出一个内部服务器Error@user1601513我想我解释过钥匙是什么?
level
的值存储在键
data[sessionData][0][level]
中,因此要输出它,您可以使用
Response.Write Request.Form(“data[sessionData][0][level]”
。记住,键只是一个字符串值没有任何推断,它只是一个用作键的字符串,用于标识发布的特定数据。@user1601513我已经解释了如何访问键及其关联值。很抱歉,我只是不明白你一直发布的代码是什么,但是唯一的
“Main”
是键
“data[sessionData][0][Level]”
返回的值的一部分,整个值是
“Main Level Plan”
。很抱歉造成混淆。我正在服用治疗癌症的止痛药。我现在正在访问POST数据,因为我需要感谢您。谢谢你对我的帮助和耐心。@user1601513没问题,别担心……很高兴能帮上忙。祝你一切顺利。
Dim pid: pid = Request.Form("data[sessionData][0][PID]")
Response.Write pid