我是Web服务的新手。在我的项目中,当我尝试运行时,我连接了Web Service(一切就绪),现在出现以下错误。
错误->
Uncaught SyntaxError: Unexpected token <
Web服务和我的页面在相同的解决方案中,但项目不同。
相关代码如下:
jQuery (URL:11761)
function GetAllCategories() { $.ajax({ url: "http://localhost:12015/myWebService.asmx?op=GetCategories", type: "POST", dataType: "jsonp", data: "{}", contentType: "application/jsonp; charset=utf-8", success: function (data) { var categories = data.d; $.each(categories, function (index, category) { alert(category.CategoryId); }); }, error: function (e) { alert(e.message); } }); }
网络服务 (URL:12015)
[WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public List<Categories> GetCategories() { //Code }
在这里问之前,我已经通过了此链接(无法理解)
弄清了您违反了相同来源策略的原因,因为站点和Web服务正在两个不同的项目中运行。
将 Web服务和网站移到同一项目中 ,它应该可以工作。
另外你的JavaScript是错误的,应该是
function GetAllCategories() { $.ajax({ url: "http://localhost:12015/myWebService.asmx/GetCategories", type: "POST", dataType: "jsonp", data: "{}", contentType: "application/jsonp; charset=utf-8", success: function (data) { var categories = data.d; $.each(categories, function (index, category) { alert(category.CategoryId); }); }, error: function (e) { alert(e.message); } }); }
op位仅用于在Web浏览器中进行测试。删除它,你应该很好。
PS @andyb公平地说,不久前提出了这个答案,但尚不清楚这是问题所在! 更新
今天在此方面做得有点麻烦,我已经澄清了一些我想分享的观点。您必须POST获得.asmx服务,并且无法跨域进行此操作。您可以GET跨域触发,但不能跨域触发,POST因此我认为这是路由问题。
POST
.asmx
GET
您可以启用GET,请参阅如何通过GET调用ASMX Web服务?。但这似乎是一个坏主意,因为它将使您的Web服务泛滥成灾!