Чтение данных POST в вызове AJAX

У меня есть некоторые значения 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 ver и ASP ver, насколько я мог его преобразовать.

 <-- 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?

[редактировать]

Вот данные RAW POST, полученные от Fiddler:

 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 Decode для этой строки,

 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] 

Я предполагаю, что это сводится к простому чтению и обработке этой строки правильно, или несколько, если отправлено более одного. Верный?

Solutions Collecting From Web of "Чтение данных POST в вызове AJAX"

Выход 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 

Что касается классического 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