1

我在标题中收到错误--JSON 为空或不是对象。

我在一个经典的 ASP 页面中。我的 json2.js 文件与我所在的这个经典 asp 页面位于同一目录中。所以我不知道为什么服务器似乎无法识别 JSON.parse() 方法。我的脚本语言是 JScript。

我注意到在不同的线程中,使用 json2.js 库是要走的路。但我似乎无法让它发挥作用。这是一个怪癖吗?这应该很简单,不是吗?

requestBody 是一个简单的 JSON 对象:[{"answer":"ok"},{"answer":"sunny"}]

谢谢!

    <script language="javascript" runat="server" src="json2.js"></script>

<%
    var jsonObject = JSON.parse(requestBody);

%>
4

3 回答 3

3

不确定,但我要做的第一件事是检查 json2.js 的权限。使用 icacls.exe,并验证该文件的权限是否与 .ASP 页本身的权限相匹配。我这样做:

%windir%\system32\icacls.exe json2.js /grant "NT AUTHORITY\IUSR:(RX)"
%windir%\system32\icacls.exe json2.js /grant "BUILTIN\IIS_IUSRS:(RX)"

此外 - 为了帮助调试 ASP,您可以在 IIS 管理器中调整 ASP 调试设置。单击“向客户端发送错误”以在客户端浏览器窗口中查看错误。

或者,您可以手动将其添加到 web.config:

<configuration>
  <system.webServer>
    <httpErrors errorMode="Detailed" existingResponse="PassThrough" />
    <asp scriptErrorSentToBrowser="false" />
  </system.webServer>
</configuration>

在 Vista/2008/Win7 上,您可能还需要“解锁”允许此操作的 web.config 节。

 %windir%\system32\inetsrv\appcmd.exe unlock config  -section:system.webServer/asp

这不会解决“JSON 不是对象”问题,但它会在发生故障时为您提供更好的错误消息。

于 2012-03-25T06:29:24.933 回答
1

应该可以,只是做了快速测试用例。

可以尝试的事情:

  1. 尝试将包含的文件重命名为json2.asp并更改为:

    <script language="javascript" runat="server" src="json2.asp"></script>
    

    mime 类型之类的东西可能有问题。

  2. 如果不走运,请将文件重命名并尝试json2.asp使用浏览器直接浏览,而不是您自己的页面。

  3. 尝试将一些调试代码添加到包含的文件中,并查看它是否正在执行。

如果仍然没有运气,还请指定您正在使用的确切服务器和平台,也许有人会有新的想法。

于 2012-03-25T09:51:31.610 回答
-2

.NET Framework 3.5 具有JavaScriptSerializer类,可以帮助反序列化 json 对象。您还可以使用JSON.NET等第三方库。

于 2012-03-25T06:34:44.453 回答