コードを単純化して配列を渡すだけにしましたが、コードをステップ実行してajaxリクエストのポイントに到達したときに まだ運がありません
jsonTextに含まれるもの:
[{"UserId":"8"},{"UserId":"9"},{"UserId":"5"},{"UserId":"13"},{"UserId":"6"},{"UserId":"11"}]
と
jsonTextSerialized contains:
"[{\"UserId\":\"8\"},{\"UserId\":\"9\"},{\"UserId\":\"5\"},{\"UserId\":\"13\"},{\"UserId\":\"6\"},{\"UserId\":\"11\"}]"
function GetUserSchedules() {
var jsonText = $.toJSON(arrParams);
var jsonTextSerialized = Sys.Serialization.JavaScriptSerializer.serialize(jsonText);
$.ajax({
type: "POST",
url: "/myurl/jquery.aspx/GenerateUserSchedules",
data: "{'data':'" + jsonTextSerialized + "'}",
contentType: "application/json",
dataType: "json",
success: function () { alert('Made It!'); },
error: function (result) { alert(Failed: ' + result.responseText);
});
背後にある私のコードは
[Serializable]
public class User
{
public int UserId { get; set; }
}
[System.Web.Script.Services.ScriptMethod]
[System.Web.Services.WebMethod]
public static void GenerateUserSchedules(User[] data)
{
//do stuff
}
responseTextは次のとおり
です。"リクエストの処理中にエラーが発生しました。"、 "StackTrace": ""、 "ExceptionType": ""}
私は何が間違っているのですか?
あなたの助けを借りた私の解決策:
皆様のご尽力に感謝申し上げます。私はあなたのすべての入力にどれほど感謝しているかを表現することはできません。私はそれを認めるのが恥ずかしいです、しかし私はこれに何日も立ち往生していました。
すべての回答から、これに取り組むにはさまざまな方法があることがわかります。私は2つの理由でJSON.stringifyソリューションが一番好きです。
- これにより、ajaxリクエストにパラメーターを追加するときに不注意によるタイプミスの危険性がなくなります。
- Olegによると、データオブジェクトをシリアル化するためのより効率的な方法です。
それで、これが私が問題を解決することに決めた方法です。
<script type="text/javascript">
var startDate;
var endDate;
var ddlViewSelectedItem;
var ddlViewSelectedValue;
var ddlOrgSelectedValue;
var arrUsers= [];
$(document).ready(function () {
ddlViewSelectedItem = $('#<%=ddlView.ClientID %> option:selected').text();
ddlViewSelectedValue = $('#<%=ddlView.ClientID %> option:selected').val();
ddlOrgSelectedValue = $('#<%=ddlOrganization.ClientID %> option:selected').val();
$.when(GetStartDate(), GetEndDate()) //these populate strt and end dates
.then(function () {
GetUserIDs(); // populates arrUsers
GetUserSchedules();
})
.fail(function () {
failureAlertMsg();
})
});
// Here I use JSON.stringify because it simplifies adding params. No messy single and/or double quote confusion. I love this. Must include json2.js from https://github.com/douglascrockford/JSON-js/blob/master/json2.js
function GetUserSchedules() {
var jsonTextStringified = JSON.stringify({ data: arrParams, startDate: startDate, endDate: endDate, ddlViewSelectedItem: ddlViewSelectedItem, ddlViewSelectedValue: ddlViewSelectedValue, ddlOrgSelectedValue: ddlOrgSelectedValue });
$.ajax({
type: "POST",
url: "/myurl/jquery.aspx/GenerateUserSchedules", // this is a call to a pagemethod, not a webservice, so .aspx is correct
data: jsonTextStringified,
contentType: "application/json",
dataType: "json",
success: function () { alert('Sweet! Made It!'); }
,
error: function (result) { alert('Failed!: ' + result.responseText); }
});
}
背後にあるコード:
[Serializable]
public class User
{
public string UserId { get; set; }
}
[System.Web.Script.Services.ScriptMethod]
[System.Web.Services.WebMethod]
public static void GenerateUserSchedules(User[] data, string startDate, string endDate, string ddlViewSelectedItem, string ddlViewSelectedValue, string ddlOrgSelectedValue)
{
//do cool stuff and eventually send data back
}
助けてくれてありがとう