2017-01-26 6 views
3

私はAjax呼び出しによって常に変化しているセッション値をいくつか持っています。 POSTデータを処理して値を設定するハンドルを取得できないようです。AJAXコールのPOSTデータを読み込みます。

私がここに渡しているのは、以下のコードのような文字列です。 AJAX呼び出しのはここ

は次のとおりです。私はこのプログラムのPHPのバージョンで正常に働いてきたが、私のASP版はデータをつかんされていない

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

は、ここで私はそれがどのようなデータを持っていることはありませんが、すべてのエラーをスローしないように見えます

' 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 

出力空白のASPで同じことをしたいです。私はPOSTオブジェクトを正しく読んでいますか?

[編集]ここで

は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 

は、私はこれは私がすべきのように見えることはstring-

data[sessionData][0][PID]=1&data[sessionData][0][Level]=Main Level Plan&data[sessionData][0][MenuName]=Kitchen&data[sessionData][0][State]=CHECKED 

にURLデコードを使用現在使用している文字列をループすることができる

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] 

つ以上の場合、私はちょうどを通じて読んで正しく、その文字列を処理し、または複数れているもの、これはダウンになると思います送信されます。正しい?

+1

? – Lankymart

+0

これはFiddlerが送信するすべてのものです。レスポンスバイト(Content-Typeによる) -------------- 〜ヘッダー〜:252 text/html:20 – user1601513

+0

これらは最初の行ですフィドラーから - 要求数:送信1 バイト:1,446 \t \tを(ヘッダー:1,240;身体:206)を受信 バイト:272 \t \t(ヘッダー:252;本体:20) – user1601513

答えて

3

RAW出力は、実際に何が起こっているかを確認するのに役立ちます。

jQueryはJSON構造体をHTTP POSTパラメータに変換していますが、処理中にあまり複雑なキー名を作成しています。

あなたは限りクラシックASPが、これは文字列のキーと値のペアとより多くの何もないのだけの集まりです懸念しているよう

data[sessionData][0][PID]=1 
data[sessionData][0][Level]=Main Level Plan 
data[sessionData][0][MenuName]=Kitchen 
data[sessionData][0][State]=CHECKED 

のようなものを持っているキーと値のペアを打破する場合。

これらのキーが何であるかを調べる正しい方法は、質問で行ったことをやり直すことですが、少し変更してください。

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 
私たちは、あなたがバイオリンを使用してキャプチャすることができ、RAW HTTP POSTは、ASPページに送信されて見ることができればそれが役立つだろう
+0

このresponse.write( "Level =>"&part ["Level"])のようにキー名を参照して渡される他の値には依然としてアクセスできません。内部サーバーエラーが発生しました – user1601513

+1

@ user1601513私はキーが何であるか説明しましたか? 'level'の値はキー' data [sessionData] [0] [Level] 'に格納されていますので、' Response.Write Request.Form( "data [sessionData] [0] [Level]" ) '。キーは単なる文字列値であることを覚えておいてください。それは推測されるものではなく、投稿された特定のデータを識別するためのキーとして使用される文字列です。 – Lankymart

+0

しかし、ここでこれは "[Level]"を出力しますが、私が得る必要があるのは "Main"です。level = pid& "[Level]" レスポンス(レベル) – user1601513

関連する問題