2011-07-28 23 views
1

私はAJAXを使用してjQueryを使用して呼び出しようとしているIHttpAsyncHandlerを作成しました。呼び出しは成功しましたが、サーバ上でパラメータを見つけることができません。ASP.Net WebサイトへのAJAX投稿にパラメータがありません

function deleteViewModel(typename) { 
    var data = { 
     "viewModel": typename, 
     "operation": "delete" 
    }; 

    $.ajax({ 
     type: "POST", 
     url: "<%= GetAppRoot() %>/viewModelGeneration.ashx", 
     contentType: "application/json", 
     cache: false, 
     data: JSON.stringify(data), 
     beforeSend: function (xhr, settings) { 
      $("[id$=processing]").dialog(); 
     }, 
     success: function (data) { 
      alert('Hey, I succeeded.'); 
     }, 
     error: function (xhr, status, err) { 
      alert('Play a sad trombone and frown.'); 

     }, 
     dataType: "json" 
    }); 
} 

呼び出しがサーバー上に伝わってくると私のハンドラによって処理されますが、私はそこviewModelまたはoperationパラメータのいずれかが表示されない:

public void ProcessRequest(HttpContext context) 
{ 
    // Problem is here - no parameters! 
    var viewModelName = context.Request.Params["viewModel"]; 
    var operation = context.Request.Params["operation"]; 

    // Other stuff... 

    GenerateResponse(context.Response, jsonResp); 
} 
をここで

は、AJAX呼び出しです

クライアントから送信された要求を見るためにオープンFiddlerをポップしました。パラメータは次のように表示されます。

POST http://localhost:4638/admin/viewModelGeneration.ashx HTTP/1.1 
Host: localhost:4638 
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0 
Accept: application/json, text/javascript, */* 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip, deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Connection: keep-alive 
Content-Type: application/json; charset=UTF-8 
X-Requested-With: XMLHttpRequest 
Referer: http://localhost:4638/admin/Admin/ResetViewModels.aspx 
Content-Length: 123 
Cookie: ASP.NET_SessionId=ifmof1ole4yv20jr0frqc0lk; .ASPXFORMSAUTH=836B7EEC539B1304126C156CA20A925DD4FF832E628C807A1CA9DCD00833BDFF36D73C39B9CCFE6EA15CF9FED95157A1CA5F07D588F04A8AFE68ABDBBA82FE9FF8507CB2B471340917616818334BCF0D958CB231A1CA3B9D91B05F2897C44663B5E86FC2FFDFE3C325AB66EC3124144F87B6FC8D3F6C7F92F2FEE745EA71EB333D18E35A7FFA992F8F52FEE509043236 
Pragma: no-cache 
Cache-Control: no-cache 

{"viewModel":"Rds.ViewModels.Updaters.RegionViewModelUpdater, Rds.ViewModels","operation":"delete"} 

サーバー上で何も起こっていないことがわかりません。いかなる考えも認められるだろう。

UPDATE:

誰かがRequest.Paramsは唯一の形態でエンコードされたデータをサポートしていることを私に示唆しました。私は単に

var dataString = JSON.stringify(data) 

を宣言しなければならなかったことによって、私は似問題があった

function updateViewModel(typename, operation) { 
    var parms = { 
     "viewModel": typename, 
     "operation": operation 
    }; 

    $.ajax({ 
     type: "POST", 
     url: "/admin/viewModelGeneration.ashx", 
     contentType: "application/json", 
     cache: false, 
     data: parms, 
     beforeSend: function (xhr, settings) { 
       $("[id$=processing]").dialog(); 
     }, 
     success: onSuccess, 
     error: onError 
    }); 
} 

答えて

3

フォームでエンコードされたデータで動作しますが、dataTypeだけでなくcontentTypeプロパティも削除する必要があります。この呼び出しにより、成功:

+0

これはクールですが、あなたは "data:JSON.stringify(data)"と言っています。それは "データ:JSON.stringify(parms)"であるべきではありませんか? –

+0

うん、そうだよ。私のエラーは、ソースコードをここからソースコードに転記し、できるだけ分かりやすくするためのものです。質問を修正しました。 –

0

data:{viewModel:'typename',operation:'delete'}, 
+0

いいえ。 Fiddlerでは、パラメータの前後に角カッコが付いていないことを除いて、上記と同様の要求が返されます。 –

1

で試してみてください。私はこれまでAJAX呼び出し、まだパラメータなしのサーバ側を更新します

のデータストリームを渡す前に
data: dataString, 

bashにしてください。少なくとも、Firebugでスクリプトをデバッグし、dataStringに予想されるオブジェクトが移入されていることを確認することができます。

+0

Fiddlerがキャッチしたリクエストは、ペイロードのパラメータを示します。最後の行は2つのプロパティを持つJSONオブジェクトです。とにかくあなたの提案を試してみました。効果はありません。 –

関連する問題