苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 6255|回复: 8

[咨询站长] 请问JS运行传入JSON值为什么会报错?

[复制链接]
发表于 2018-5-29 18:06:24 | 显示全部楼层 |阅读模式
飞哥,请问我用助手运行JS方法时,此方法传入一个JSON值,可运行时为什么会报错?我哪里写错了?求助,谢谢
StringBuilder sb = new StringBuilder();
            sb.Append("function getContentStr(data) {");
            sb.Append("    let content = sortObj(Object.assign(data))");
            sb.Append("    let keys = Object.keys(content).sort()");
            sb.Append("    let newArr = []");
            sb.Append("    for (let key of keys) {");
            sb.Append("        let val = content[key]");
            sb.Append("        if (typeof val == 'object') {");
            sb.Append("            val = JSON.stringify(val)");
            sb.Append("        }");
            sb.Append("        newArr.push(`${key}=${val}`)");
            sb.Append("    }");
            sb.Append("    let contentStr = newArr.join('&')");
            sb.Append("    contentStr += 'kosun.net'");
            sb.Append("    return contentStr");
            sb.Append("}");
            sb.Append("");
            sb.Append("function sortObj(obj) {");
            sb.Append("    let sortKeys = Object.keys(obj).sort()");
            sb.Append("    let newObj = {}");
            sb.Append("    for (let key of sortKeys) {");
            sb.Append("        let val = obj[key]");
            sb.Append("        if (typeof val == 'object') {");
            sb.Append("            if (Array.isArray(val)) {");
            sb.Append("                newObj[key] = sortArray(val)");
            sb.Append("            } else if (!Array.isArray(val) && Object.keys(val).length > 0) {");
            sb.Append("                newObj[key] = sortObj(val)");
            sb.Append("            } else {");
            sb.Append("                newObj[key] = val");
            sb.Append("            }");
            sb.Append("        } else {");
            sb.Append("            newObj[key] = val");
            sb.Append("        }");
            sb.Append("    }");
            sb.Append("    return newObj");
            sb.Append("}");
            StringBuilder sb1 = new StringBuilder();
            sb1.Append({\"act\":208,\"channel_name\":\"PC\",\"is_special_agent\":0,\"password\":\"123\",\"login_terminal\":1,\"user_name\":\"G28730\",\"verify_code\":\"5546\"}");
            MessageBox.Show(HttpHelper.JavaScriptEval(sb.ToString(), "getContentStr(" + sb1.ToString() + ")"));



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
 楼主| 发表于 2018-5-30 08:48:55 | 显示全部楼层
报错图如下:
1111.png
发表于 2018-5-30 08:51:00 | 显示全部楼层
Object是那来的,C#在执行的时候可不会去你的浏览器调用当前的组件,所有用到的东西都必须事先提供
 楼主| 发表于 2018-5-30 08:58:59 | 显示全部楼层
飞哥,我不太明白您的意思,是不是指在C#里不能同时执行两个JS的方法?因为我这两个方法是:A和B,在A方法里同时执行B方法。
 楼主| 发表于 2018-5-30 09:03:05 | 显示全部楼层
sufeinet 发表于 2018-5-30 08:51
Object是那来的,C#在执行的时候可不会去你的浏览器调用当前的组件,所有用到的东西都必须事先提供

飞哥,我不太明白您的意思,是不是指在C#里不能同时执行两个JS的方法?因为我这两个方法是:A和B,在A方法里同时执行B方法。
发表于 2018-5-30 09:55:32 | 显示全部楼层
当然可以,我是说像 JSON.stringify,Object.assign这种方法或者对像是那里来的,C#并不知道,他只是解析语言,不能像写JS在浏览器里执行一个随意调用 ,只能支持最纯粹的JS,或者是说只要不是脚本JS里自带的都必须定义出来。比如你访问浏览器用window这都是不存在的,你是在C#的CLR里执行不是在浏览器里执行
 楼主| 发表于 2018-5-30 10:04:42 来自移动端 | 显示全部楼层
sufeinet 发表于 2018-5-30 09:55
当然可以,我是说像 JSON.stringify,Object.assign这种方法或者对像是那里来的,C#并不知道,他只是解析 ...

感谢飞哥的指导,这回我明白了,他这是解析不像浏览器那样可以直接调用,解析需要把各个值都做好让他直接解析执行,再次感谢飞哥的帮忙~
发表于 2018-5-30 10:06:17 | 显示全部楼层
swlhpyn 发表于 2018-5-30 10:04
感谢飞哥的指导,这回我明白了,他这是解析不像浏览器那样可以直接调用,解析需要把各个值都做好让他直接 ...

是的就是这个道理,只是一个CLR,没办法像浏览器一个兼容那么多。
发表于 2018-6-2 00:53:03 | 显示全部楼层
JSON.stringify,Object.assign    v8引擎是支持的 可以了解一下 https://github.com/rjamesnw/v8dotnet
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-12-26 15:42

© 2014-2021

快速回复 返回顶部 返回列表