0

次のコードがあります。

if (localStorage["Course" + '@Model.Course.CourseID'] != null && localStorage["Course" + '@Model.Course.CourseID'] != "")
{
  var courseSectionID = localStorage["Course" + '@Model.Course.CourseID'];
  alert("BEFORE :" + courseSectionID);
  var postData = { 'courseSectionID': courseSectionID };
  $.post('/Course/CourseSectionLaunchStillExistCheck/', postData, function (data)
  {
    if (data == "True") 
    {
      var id = parseInt(courseSectionID);
      alert("1: " + id);
    }
    else
    {
      var id = '@Model.CourseSections.First().CourseSectionID';
      alert("2: " + id);
    }
  });
}
else
{
  var id = '@Model.CourseSections.First().CourseSectionID';
  alert("3: " + id);
}

var urlstring = 'Section/' + id;
alert(urlstring);

アラート 3 で入力すると、期待どおりに常に正しいセクション/115などを取得しますが、アラート ポイント 1 と 2 から入力すると、セクション/未定義としてエラーが返されますが、ポイント 1 と 2 のアラート文字列には正しい値なので、これらが設定またはURL文字列で定義されていない理由を理解できません。本当にばかげたことをしていると確信していますが、それが何であるかがわかりません。助けていただければ幸いです

4

2 に答える 2

1

$.post() によって行われる ajax リクエストはデフォルトで非同期であるため、コールバック関数を使用して可能な解決策。私はコードをテストしていません。

//receives a callback function as parameter to print the id.
myFunction(printFunction);//see declaration of printFunction below


//prints the id
function printFunction(id) {
    var urlstring = 'Section/' + id;
    alert(urlstring);
}


function myFunction(callbackFunctionAsParameter) {

    if (localStorage["Course" + '@Model.Course.CourseID'] !== null && localStorage["Course" + '@Model.Course.CourseID'] !== "") {
        var courseSectionID = localStorage["Course" + '@Model.Course.CourseID'];
        var postData = {
            'courseSectionID': courseSectionID
        };

        //by default all ajax requests are sent asynchronously in jquery => http://api.jquery.com/jQuery.ajax/
        $.post('/Course/CourseSectionLaunchStillExistCheck/', postData, function (data) {
            var id = null;

            if (data == "True") {
                id = parseInt(courseSectionID);
            } else {
                id = '@Model.CourseSections.First().CourseSectionID';
            }

            callbackFunctionAsParameter(id); //print here
        });
    } else {
        var id = '@Model.CourseSections.First().CourseSectionID';
        callbackFunctionAsParameter(id); //print here
    }

}
于 2013-09-17T20:10:40.390 に答える