1

関数を呼び出してドロップダウン リストを再作成する JavaScript があります。2 つの異なるドロップダウン リストに入力する 2 つの呼び出しがあります。どちらもローカル Dev で正常に動作します。サーバー上で動作するのは 1 つだけです。エラーが出たもの。リモートでデバッグしたところ、呼び出しが関数に到達し、関数は適切な結果を返しました。エラーが発生したのは関数を離れた後です。アプリケーションはasp.net mvc 3で、サーバーはWindowsサーバー2008 iis7です。

問題の原因を絞り込むにはどうすればよいですか。

<script type="text/javascript">


function getSects(abbr) {
    $.ajax({
        url: "@Url.Action("SectionSwitch", "Assets")",
        data: { abbreviation: abbr },
        dataType: "json",
        type: "POST",
        error: function () {
            alert("An error occurred.");
        },
        success: function (data) {
            // var test = JSON.parse(data);
            //alert(test);
            var items = "";
            $.each(data, function (i, item) {
                items += "<option value=\"" + item.sectionNum + "\">" +      item.sectionname + "</option>";

            });

            $("#Asset_Section_SectionKey").html(items);
        }
    });
}

function getDivs(abbr) {
    $.ajax({
        url: "@Url.Action("DivisionSwitch", "Assets")",
        data: {abbreviation: abbr},
        dataType: "json",
        type: "POST",
        error: function() {
            alert("An error occurred.");
        },
        success: function (data2) {
           // var test = JSON.parse(data);
            //alert(test);
            var items = "";
            $.each(data2, function(i, item) {
                items += "<option value=\"" + item.DivisionKey + "\">" + item.DivisionDescription + "</option>";

            });

            $("#Asset_Section_Division_DivisionKey").html(items);
        }
    });
}

$(document).ready(function(){
    $("#Asset_Section_Division_Department_DepartmentKey").change(function () {
        var abbr = $("#Asset_Section_Division_Department_DepartmentKey").val();

        getDivs(abbr);
    });

    $("#Asset_Section_Division_DivisionKey").change(function () {
        var abbr = $("#Asset_Section_Division_DivisionKey").val();

        getSects(abbr);
    });
});
</script>

エラーをスローしているのは getDivs 関数です。関数は次のとおりです。

 public ActionResult DivisionSwitch(int abbreviation)
    {

        var newdivision = from f in db.Divisions
                          where f.DepartmentKey == abbreviation
                          select f;

        return Json(newdivision);

    }

    public ActionResult SectionSwitch(int abbreviation)
    {

        var newsection = (from t in db.Sections
                          where t.DivisionKey == abbreviation
                          select new sectionInfo { sectionNum = t.SectionKey, sectionname = t.SectionDesciption });

        return Json(newsection);

    }
4

4 に答える 4

1

ajax メソッドのエラー プロパティを変更して、3 つのパラメーターを受け取り(jqXHR, textStatus, errorThrown)、 および に警告しerrorThrownますtextStatus

error: function (jqXHR, textStatus, errorThrown) {
        alert("Error, status: " + textStatus + " error: " + errorThrown);
    },
于 2013-03-07T14:51:06.170 に答える
1

$.ajax のエラー部分は、タイプ jqXHRtextStatus、 の 3 つのパラメーターを受け入れることができますerrorThrown

最初のパラメーターは jqXHR 型のオブジェクトで、他の 2 つは文字列です。エラーを表示するために使用できjqXHR.responseTextます。

$.ajax({ // Some settings
    error: function(jqXHR, textStatus, errorThrown) {
        alert(jqXHR.responseText);
        // or
        console.log(jqXHR);
    }

jQuery Web サイトによると、彼らの例は次のことを示唆しています。

$.ajax({ // your settings

}).done(function(data, textStatus, jqXHR) { 
    // Handle success 
}).fail(function(jqXHR, textStatus, errorThrown) {
    // Handle error here
});

詳細については、jQuery.ajax()を見て、減価償却のセクションを読んでください。

于 2013-03-07T14:51:39.357 に答える
1

エラー ハンドラを設定し、その内容を確認する

$( document ).ajaxError(function(event, jqxhr, settings, exception) {
    console.log(jqxhr);
    console.log(exception);
});
于 2013-03-07T14:50:35.170 に答える
0

すべての助けに感謝しますが、実際の呼び出しが返すものと同様に、返されるものを書き直すことにしました。どうやら、返されたものにサーバーに問題があったようです。

public ActionResult DivisionSwitch(int abbreviation)
{

    var newdivision = from f in db.Divisions
                      where f.DepartmentKey == abbreviation
                      select f;

    return Json(newdivision);

}

public ActionResult SectionSwitch(int abbreviation)
{

    var newsection = (from t in db.Sections
                      where t.DivisionKey == abbreviation
                      select new sectionInfo { sectionNum = t.SectionKey, sectionname = t.SectionDesciption });

    return Json(newsection);

}

コードを次のように変更しました。

public ActionResult DivisionSwitch(int abbreviation)
    {

        var newdivision = (from f in db.Divisions
                          where f.DepartmentKey == abbreviation
                           select new DivisionInfo { DivisionNum = f.DivisionKey, Divisionname = f.DivisionDescription });

        return Json(newdivision);
}

結果を格納する新しいクラスを作成し、必要な 2 つのフィールドに絞り込みました。

     public class DivisionInfo
{
    public int DivisionNum { get; set; }
    public string Divisionname { get; set; }
}
于 2013-03-07T16:02:46.950 に答える