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。

遵循@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 回答
2

我认为问题是这条线的物理路径

url: '../Home/Populate/'

将其更改为这样的相对路径:

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

此外,您可以使用浏览器的 devTools 查看您的 json url。并且,检查它,如果你的 json url 是正确的。

于 2013-02-08T09:57:38.507 回答
1

JSON is Undefined看起来更像是浏览器错误。IE7、FF3.0 等旧浏览器中没有内置 JSON。因此,看起来您正在使用不同的浏览器来查看您的网站。假设如果你删除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")而不是像现在这样的相对网址

于 2013-02-08T10:21:51.573 回答
0

因为并非所有浏览器都内置了 JSON,所以请在https://github.com/douglascrockford/JSON-js下载它并包含在您的网站上

顺便说一句,为什么您将 stringify 用于原始类型?

你可以做

 data:  { id: @ViewBag.Id }

然后在 ASp.Net Mvc 控制器端

public ActionResult Populate(int id)

所以 ASp.net 会为你解析你的参数。

于 2013-02-08T20:16:58.853 回答