2013-03-02 30 views
0

我想在使用jQuery的asp.net项目中使用wcf rest api。为此我做了:使用jquery在ASP.net中使用WCF Rest服务

  1. 创建一个WCF Rest服务源代码可以从here下载。
  2. 创建一个ASP.Net项目,使用jQuery来使用restAPI。源代码here

在ASP .Net项目上点击按钮我试图调用一个REST服务。但每次我得到两个问题:

  1. 调用var jsondata = JSON.stringify(request);在TestHTML5.js抛出一个错误说“微软JScript运行时错误:‘JSON’未定义

  2. 当我按下忽略它继续朝向WCF Rest API调用,但它总是返回错误(Not Found)函数。 Rest API永远不会被调用。

感谢各位的帮助提前。


答: 解决方案和源链接可以在这个link找到。

+0

您正在测试什么浏览器和浏览器版本? JSON对象在IE7中不可用 – Tung

+0

我正在使用IE9。在Windows 8中IE10不会发生同样的问题。它的工作原理(没有Json错误)非常好。 – nishantcop

+0

确保您的页面不是以怪癖模式呈现,也不是以[可压缩模式]呈现(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

回答

1

我看过您提供的样本代码和问题是,你违反了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); 
} 
+0

完美的解释达林。它具有魔力:-)非常好的点对点解释。我对这一切都很陌生,因此产生了所有这些故障。稍后当我完成我的实验时,我可能会再回来检查几件事情。现在感谢您为我正在寻找的确切的东西。 – nishantcop

+0

嗨Darin,一个简单的问题是,如果我们托管一个基于WCF的REST API,并且有另一个应用程序(可能在java或任何其他平台上)使用简单的HTML5和jQuery,他们不能利用这个WCF RIA? – nishantcop

+0

由于您的WCF REST服务正在处理XML和JSON等互操作格式,因此从其他平台上使用它绝对没有问题。 –

1

您是否添加此参考?

script type="text/javascript" src="../../json.js"></script> 

我有同样的问题,搜索我得到thisresult

+0

感谢它似乎与IE10(Windows 8)的问题,我在Win7中与IE9有问题。然而,你有没有关于第二个问题的想法,似乎更麻烦。感谢大家提前帮助 – nishantcop