0

JSONResultから文字列リストを解凍できないようです。

コントローラは次のとおりです。

    [HttpPost]
    public JsonResult GetDescriptions(string incomingProjectName)
    {
        List<string> result = new List<string>();
        using (SFEntities ctx = new SFEntities())
        {
            result = (from ct in ctx.SF_CLIENT_TASK
                      join cp in ctx.SF_CLIENT_PROJECT on ct.PROJECT equals cp.ID
                      where cp.NAMEX == incomingProjectName
                      select ct.DESCRIPTION).ToList();
        }

        return Json( result );
    }

そして、これが私のajaxメソッドです:

    $.ajax({
        type: "POST",
        url: "Home/GetDescriptions",
        contentType: "application/json; charset=utf-8",
        data: '{incomingProjectName : "projName"}',
        dataType: "json",
        success: function (msg) {
            alert("msg: " + msg);  // [Object object]
            alert("msg: 2 string: " + msg.toString);    // function toString() { [native code] }
            var list = eval(msg);
            alert("list: " + list); // blank
            alert("list to string: " + list.toString);  // function toString() { [native code] }
            alert("list data: " + list.valueOf);    // valueOf() { [native code] }
            alert("msg[0]: " + msg[0]);     // undefined
            alert("list[0]: " + list[0]);   // undefined
        },
    });

デバッガーでは、結果の内容に項目の長いリストが含まれていることがわかりますが、JavaScriptでアクセスしようとすると、表示されません。

呼び出せない、ある種の逆シリアル化または抽出メソッドはありますか?

編集:これは定型的なものでなければならないようですが、私は何らかの理由でこれを行う多くの例をグーグルで検索することができませんでした...

編集:これが私の最終的な(動作中の)コードです:

    $.ajax({
        type: "POST",
        url: "Home/GetDescriptions",
        data: { incomingProjectName: projName },
        success: function (msg) {
            alert( "msg: " + msg );
        },
        error: function (msg) {
            alert("Failed: " + msg.status + ": " + msg.statusText);
        }

そしてここにコントローラーコードがあります:

    public JsonResult GetDescriptions(string incomingProjectName)
    {
        List<string> result = new List<string>();
        using (SFEntities ctx = new SFEntities())
        {
            result = (from ct in ctx.SF_CLIENT_TASK
                      join cp in ctx.SF_CLIENT_PROJECT on ct.PROJECT equals cp.ID
                      where cp.NAMEX == incomingProjectName
                      select ct.DESCRIPTION).ToList();
        }

        return Json( result );
    }
4

2 に答える 2

1

次のコントローラーメソッドを使用してコードをテストしましたが、問題なく動作しました。

public JsonResult Test()
{
    return Json(new List<string> {"a", "b"},JsonRequestBehavior.AllowGet);
}

そしてJSコード:

$.ajax({
    type: "POST",
    url: "Home/Test",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (msg) {
        console.log("msg: " + msg);  // [Object object]
        console.log("msg: 2 string: " + msg.toString);    // function toString() { [native code] }
        var list = eval(msg);
        console.log("list: " + list); // blank on your code
        console.log("list to string: " + list.toString);  // function toString() { [native code] }
        console.log("list data: " + list.valueOf);    // valueOf() { [native code] }
        console.log("msg[0]: " + msg[0]);     // undefined on your code
        console.log("list[0]: " + list[0]);   // undefined on your code
    }
});

そして成功方法の結果:

msg: a,b
msg: 2 string: function toString() { [native code] }
list: a,b
list to string: function toString() { [native code] }
list data: function valueOf() { [native code] }
msg[0]: a
list[0]: a

問題は、リストが空であるか、シリアライザーに問題があることだと思います。デバッグモードでJsonの結果の内容を確認してみてください。

アップデート:

コントローラアクションから返されるデータを確認するには、属性を削除し、コードで[HttpPost]returnステートメントをに変更してください。次に、に戻って返されるjsonを確認してください。return Json( result ,JsonRequestBehavior.AllowGet);http://yoursite/controllername/GetDescriptions?incomingProjectName=projName

于 2012-08-22T13:31:05.720 に答える
-1

eval関数を削除しますが、なぜそこにあるのですか?配列がある場合は、次のようにそれを反復処理できるはずです。

for(var m in msg)
{
    alert(m[i]);
}
于 2012-08-22T14:02:43.660 に答える