0

ASP.NET MVC 3 では、AJAX 呼び出しで JSON を使用しています。開発マシンで Visual Studio を使用してアプリケーションを実行すると、アプリケーションは正常に動作します。しかし、同じアプリケーションを公開し、仮想ディレクトリを使用してアクセスしようとすると、エラーJSON is Undefinedが表示されます。

コード

function PopulateData() {

            $.ajax({ url: '../Home/Populate/',//**Error Line**
                type: 'POST',
                    data:  JSON.stringify({
                    'id':@ViewBag.Id                     }),

                    dataType: 'json',
                    contentType: "application/json; charset=utf-8",
                success: function (data) 
                {         
                    //code

                } // ajax callback

            });  // ajax call

        }

返信してください

4

4 に答える 4

2

問題はこの行の物理パスだと思います

url: '../Home/Populate/'

次のように相対パスに変更します。

url: '@Url.Action("Populate", "Home")' 

また、ブラウザの devTools で json の URL を確認できます。そして、あなたのjson URLが正しいかどうかを確認してください。

于 2013-02-08T09:57:38.507 に答える
2

これは、プロジェクトに対してローカルなコントローラーの URL を指定したためです。

@Url.Action("actionname","controllername")このアプローチに従うことは常に良いことです。

         $.ajax({ 
            url: '@Url.Action("Populate","Home")',
            type: 'POST',
            data:  JSON.stringify({id:@ViewBag.Id}),
            dataType: 'json',
            contentType: "application/json; charset=utf-8",
            success: function (data) 
            {         
                //code

            } // ajax callback

        });  // ajax call
于 2013-02-08T09:58:18.117 に答える
1

JSON is Undefinedは、ブラウザ エラーのように見えます。JSONIE7 や FF3.0 などの古いブラウザには組み込まれていません 。そのため、別のブラウザを使用して Web サイトを表示しているように見えます。削除JSON.stringifyすると正常に動作するとします(なぜ必要なのかはわかりませんが、jqueryはデータをオブジェクトとして受け入れ、それをサーバーに正しく渡すために必要なすべてのことを行います):

function PopulateData() {

            $.ajax({ url: '../Home/Populate/',//**Error Line**
                type: 'POST',
                    data:  {'id':@ViewBag.Id },    
                    dataType: 'json',
                    contentType: "application/json; charset=utf-8",
                success: function (data) 
                {         
                    //code

                } // ajax callback

            });  // ajax call

        }

ここの他の回答で言われたurl: @Url.Action("Populate", "Home")ように、現在のように相対URLの代わりに使用することをお勧めします

于 2013-02-08T10:21:51.573 に答える
0

JSON はすべてのブラウザーに組み込まれているわけではないため、https://github.com/douglascrockford/JSON-jsをダウンロードして、Web サイトに含めます。

ところで、なぜプリミティブ型に stringify を使用しているのですか?

できるよ

 data:  { id: @ViewBag.Id }

次に、ASp.Net Mvc コントローラー側で

public ActionResult Populate(int id)

したがって、ASp.net はパラメーターを解析します。

于 2013-02-08T20:16:58.853 に答える