我在学习如何编写更多使用Ajax的动态网站。我发现的例子似乎只将一个字符串参数传递给服务。稍微看了一些后,我发现有些开发人员通过创建对象并使用JSON序列化对象来传递多个值。使用简单的JSON Hello World应用程序遇到问题
所以,我想创建一个简单的HelloWorld应用程序,在两个方向传递对象。例如,一个服务将一个.NET对象序列化为JSOn,并将其传递回浏览器以便通过Javascript进行解析,还有一个示例,其中一个Javascript对象在客户端序列化为JSON,然后反序列化为.NET对象在服务器上。要序列化JavaScript对象到JSON,我发现一个JavaScript程序,json.js,在json.org,
我简单的例子,有以下包含文件:
<script language="javascript" type="text/javascript" src="Scripts/jquery-1.4.1.js"></script>
<script language="javascript" type="text/javascript" src="Scripts/json.js"></script>
<script language="javascript" type="text/javascript" src="Scripts/script.js"></script>
第三是我自己的js文件,其中包括以下代码:
function CallHandler()
{
$.ajax({
url: "Handlers/Handler1.ashx",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: { 'Id': '101', 'Name': 'Chad' },
responseType: "json",
success: OnComplete,
error: OnFail
});
return false;
}
function CallHandler2()
{
var EmployeeSerialized = JSON.stringify(GetInput());
$.ajax({
url: "Handlers/Handler2.ashx",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: EmployeeSerialized,
responseType: "json",
success: OnComplete2,
error: OnFail
});
return false;
}
function GetInput()
{
var emp = new Object();
emp.Name = 'Brij';
emp.Age = '27';
return emp;
}
function OnComplete(result)
{
alert(result.ID + ' ' + result.Name + ' ' + result.Age + ' ' + result.Timestring);
}
function OnComplete2(result)
{
alert("Complete2");
}
function OnFail(result)
{
alert('Ajax failed' + result);
}
它是从以下网页调用:
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="WebApplication2.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script language="javascript" type="text/javascript" src="Scripts/jquery-1.4.1.js"></script>
<script language="javascript" type="text/javascript" src="Scripts/json.js"></script>
<script language="javascript" type="text/javascript" src="Scripts/script.js"></script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="CallHandler" OnClientClick="CallHandler();" />
<asp:Button ID="Button2" runat="server" Text="CallHandler2" OnClientClick="CallHandler2();" />
</div>
</form>
</body>
</html>
我的问题是我无法同时使两个按钮事件同时工作。例如,现在,如果我包含全部3个INCLUDE语句,则只有Callhandler2事件成功地调用其服务器端Httphandler。但是,如果我注释掉json.js INCLUDe文件,第一个可以工作,但第二个可以打破。显然,第二个因为需要在被移除的js文件中找到的Stringify函数而中断。问题是,为什么包含json.js文件会破坏Callhandler2事件?肯定会有某种冲突。
考虑到我应该尝试最新版本的jQuery库,我试图包括版本1.6.2,但是,当CallHandler2 buton被推送时,这只会引入JSON解析错误,之前发生。
我发现使用Javascript非常令人沮丧,与我在服务器双面开发方面的经验相比,有很多原因,包括缺乏良好的错误消息。在这种情况下,我没有错误消息,功能就会中断。
因为我认为你可能很难找到错误,所以我发布了我的代码。这是我的小型Visual Studio 2010 project。如果你下载我的项目,你可能需要重置文件上的只读标志,如果你想修改它们。对于那个很抱歉。
更新:
我看到的错误是在json.js的554线:
// If the text is not JSON parseable, then a SyntaxError is thrown.
throw new SyntaxError('JSON.parse');
我看到变量EmployeeSerialized计算结果为
{"Name":"Brij","Age":"27"}
,然后当我尝试将EmployeeSerialized JSON字符串值作为数据传递给该函数时,Callhandler2函数中的ajax调用会死亡,并显示以下错误Handler2 HttpHandler。
SCRIPT5022: Exception thrown and not caught
json.js, line 554 character 13
什么,如果有的话,这个JSON字符串是错误的?
什么是JavaScript控制台报告的错误? – Justin808
你可以在这里验证你的json字符串是否有任何错误:http://jsonlint.com/ – Neelam
如果你没有绑定到旧版本的jQuery,请升级到最新版本(截至本评论为止1.7.1)。如果有错误,可以解决! –