我看过您提供的样本代码和问题是,你违反了same origin policy restriction
。您无法执行跨域AJAX调用。在您的示例中,服务托管在http://localhost:35798
上,并且网络应用程序调用http://localhost:23590
,这是不可能的。您将不得不在同一个ASP.NET项目中同时托管服务和调用应用程序。您好像试图在客户端使用($.support.cors = true;
)启用CORS,但您的服务不支持CORS。
您的调用页面(TestHTML5.htm
)出现的另一个问题是,您已经包含jquery两次(一次缩小和一次标准版本),并且在jquery后包含脚本(TestHTML5.js
)。你应该修复你的脚本引用。还有一个问题是以下行<script type="text/javascript"/>
,这是无效的。
<!DOCTYPE html>
<html dir="ltr" lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>SignUp Form</title>
<script type="text/javascript" src="../Scripts/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="../Scripts/TestHTML5.js"></script>
</head>
<body>
<button id="Send" onclick="testHTML5OnClick();">
Send Me ID!
</button>
</body>
</html>
,然后在TestHTML5.js
你也可以清洁:
所以,通过固定的标记(我为了专注于重要部分已删除所有你在标记有CSS噪声)启动一点点。例如,您的服务正在侦听以下url模式json/{id}
并且只接受GET动词,并且您尝试使用不可能的POST。除此之外,您正尝试使用对GET动词没有任何意义的JSON.stringify方法。您应该简单地将id作为您在服务中定义的url部分的一部分发送。
function testHTML5OnClick() {
var id = 5;
var url = "../RestServiceImpl.svc/json/" + id;
var type = 'GET';
callLoginService(url);
}
function callLoginService(url, type) {
$.ajax({
type: type,
url: url,
success: serviceSucceeded,
error: serviceFailed
});
}
function serviceSucceeded(result) {
alert(JSON.stringify(result));
}
function serviceFailed(result) {
alert('Service call failed: ' + result.status + '' + result.statusText);
}
您正在测试什么浏览器和浏览器版本? JSON对象在IE7中不可用 – Tung
我正在使用IE9。在Windows 8中IE10不会发生同样的问题。它的工作原理(没有Json错误)非常好。 – nishantcop
确保您的页面不是以怪癖模式呈现,也不是以[可压缩模式]呈现(http://www.sevenforums.com/tutorials/1196-internet-explorer-compatibility-view-turn-off.html)。如果你想支持这些操作模式,那么Sharrooz的建议应该起作用。看到答案[这里](http://stackoverflow.com/questions/5339232/json-is-undefined-error-in-javascript-in-internet-explorer) – Tung