【问题标题】:JSON.parse(...).forEach is an error on published websiteJSON.parse(...).forEach 是已发布网站上的错误
【发布时间】:2020-07-28 12:39:54
【问题描述】:

我目前正在处理在 web mvc 项目上呈现一些图形。当我调试代码时,图表已经在我的机器上呈现,但是当我在我的 QA 服务器的 IIS 上发布它时,我在控制台上收到以下错误

TypeError: JSON.parse(...).forEach 不是函数

这是我目前正在工作的代码的 sn-p

    ajaxPostConstancy.done(function (html) {
                        Utils.Alerts.HideGif();
                        var data = {};

                        var category = [];
                        var colors = [];
                        JSON.parse(html).forEach(function (e) {
                            category .push(e.date);
                            colors.push(e.color);
                            data[e.date] = e.data1;
                        })
....

有什么想法吗?

编辑:JSON.parse 中的 html 变量是此代码返回的字符串

public async Task<string> GetCompositionGraph(string contract, string methodName)
        {
            string preFormat = null;
            try
            {
                string method = _configuration["Position:method:" + methodName];
                PositionBL _bl = new PositionBL(Request, Response, _baseUri, method);
                object model = await _bl.PostCompositionGraph(contract);
                preFormat = JsonConvert.SerializeObject(model);
            }
            catch(Exception ex)
            {
                ViewBag.error = ex.Message;
            }
            return preFormat;
        }

编辑2:第一次编辑时代码生成的html变量的内容:

html 内容: [{"color":"#162ECB","date":"20","data1":1122954.8708},{"color":"#E03473","date":"00","data1":1323061.6168} ,{"color":"#CE029D","date":"26","data1":29982.2271}]

这张图片是我在调试网站时从 JSON.parse 得到的结果

编辑 3:视觉输入

在我的本地主机上部署站点以进行调试时的资源管理器控制台

浏览器控制台在检查 QA 服务器上发布的网站时

编辑 4:所以我把它缩小到当我在 Release 模式下调试网站时出现错误的事实,所以这是向前迈出的一步

【问题讨论】:

  • 什么是html
  • 猜想,如果它解析成功但forEach 不是一个函数,那么你解析的是一个object而不是一个数组。但是html 对于某些 JSON 来说是个奇怪的名字。
  • @VLAZ 我为 html var 添加了一个小解释
  • 对不起,我看错了。但是html的内容是什么?您正在展示它是如何生成的,但我们甚至无法说出这会产生什么真实数据。就我们所知,它可能是null,也可能是一个普通的对象。事实上,代码暗示了这一点,但我不知道。你能说明失败的 JSON 是什么吗?
  • @VLAZ 我添加了在我的本地主机上呈现的图表的内容和视觉效果,但在发布时没有

标签: javascript json asp.net-mvc asp.net-core


【解决方案1】:

如果preformat 返回null对象 forEach() 将抛出错误。

ajaxPostConstancy.done(function (html) {
    Utils.Alerts.HideGif();
    var data = {};

    var category = [];
    var colors = [];
    var parsedDatas = JSON.parse(html)

   if (Array.isArray(parsedDatas)) {
       parsedDatas.forEach(function (e) {
           // logic here
       });
   } else {
       console.warn('This is not an array : ', html)
   }
...

【讨论】:

  • 这里的问题是 forEach() 在我的本地主机上运行良好,但是突然发布时我得到 TypeError: JSON.parse(...).forEach is not a function,两次都是在完全相同的服务器上查询完全相同的 API。而且我知道这不是通信问题,因为所有其他 API 在两个站点上都能完美运行
【解决方案2】:

forEach() 方法为数组中的每个元素调用一次函数,而 JSON.parse() 使 html 成为一个对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-08
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多