2012-03-22 139 views
1

我在标题中看到错误--JSON为空或不是对象。'JSON'为空或不是对象'经典ASP中的错误

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

我注意到,在另一个线程中,使用json2.js库是一条路。但我似乎无法得到这个工作。这是一个怪癖吗?这应该是非常简单的,不是吗?

requestBody是一个简单的JSON对象:[{ “答案”: “OK”},{ “答案”: “阳光灿烂”}]

谢谢!

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

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

%> 

回答

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不是对象”的问题,但它会在发生故障时为您提供更好的错误消息。

+0

非常感谢。你有一些认真深入的知识。 – user798719 2012-03-26 18:06:13

-2

.NET Framework 3.5的JavaScriptSerializer类可以帮助反序列化json对象。您也可以使用第三方库,如JSON.NET

+0

问题是关于经典ASP(preASP.NET)。 – 2012-03-25 22:11:00

1

应该工作,只是做了快速测试案例。

您可以尝试在你的身边:

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

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

    有可能是与MIME类型和这样的东西的问题。

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

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

如果仍然没有运气,请同时指定您使用的确切服务器以及平台和可能有人会有新的想法。