【问题标题】:JSON is undefined in asp.net mvcJSON 在 asp.net mvc 中未定义
【发布时间】:2013-01-24 01:24:08
【问题描述】:

在 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

        }

请回复

【问题讨论】:

  • 你添加了json ui文件或任何必要的文件吗?
  • 你用的是什么浏览器?
  • 您使用什么浏览器查看您的网站?
  • 如果您使用的是服务器浏览器或 IIS 管理器中内置的浏览功能(我不确定您在这里所说的 使用虚拟目录 是什么意思)旧的 IE 引擎,它没有内置的 JSON 对象。

标签: jquery asp.net-mvc json


【解决方案1】:

我认为问题是这一行的物理路径

url: '../Home/Populate/'

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

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

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

【讨论】:

  • 嗨 AliRıza Adıyahşi 尝试使用相对路径 url:'@Url.Action("Populate","Home")',但仍然遇到相同的错误
【解决方案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

【讨论】:

  • 嗨 Karthik,尝试使用相对路径 url:'@Url.Action("Populate","Home")',但仍然出现相同的错误
  • @user1799982 你用的是什么浏览器
  • @user1799982 check this 如果您使用的是 IE
  • 嗨 Karthik 我的浏览器是 IE 8 我尝试删除 JSON.Stringify 然后没有获取数据。
  • @user1799982 所​​以,$.ajax 中的数据选项是data: ({ id: @ViewBag.Id })。是一样的吗?
【解决方案3】:

JSON 未定义 看起来更像是浏览器错误。在 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"),而不是像现在这样的相对网址

【讨论】:

  • 哦。我明白了,你将它作为 json 传递。你确定不能使用默认的 application/x-www-form-urlencoded 吗?
  • @user1799982 尝试删除JSON.stringifycontentType:...。可能它会正常工作,但这取决于服务器端。
【解决方案4】:

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

顺便问一下,为什么要对原始类型使用 stringify?

你可以的

 data:  { id: @ViewBag.Id }

然后在 ASp.Net Mvc 控制器端

public ActionResult Populate(int id)

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

【讨论】:

猜你喜欢
  • 2012-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多