3

我是网络服务的新手。在我的项目中,当我尝试运行时,我连接了 Web 服务(一切都是现成的),但出现以下错误。

错误 -->

Uncaught SyntaxError: Unexpected token <

Web 服务和我的页面位于相同的解决方案中,但项目不同。

相关代码如下:

jQuery (网址: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);
      }
   });
}

网络服务(网址:12015)

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<Categories>  GetCategories()
{
    //Code
}

在问这里之前我已经浏览了这个链接(无法理解)

编辑:

从这篇文章中得到了替代答案。

4

2 回答 2

5

弄清楚您的站点和 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跨域触发 a 但不能触发 aPOST所以这是我认为的路由问题。

您可以启用GET,请参阅如何通过 GET 调用 ASMX Web 服务?. 但这似乎是个坏主意,因为它会将您的 Web 服务暴露给所有人!

于 2012-12-27T11:37:25.050 回答
0

不是您问题的直接答案-但以下是我为解决类似问题所必须做的

如何在 ASP.Net 2.0 中强制数据类型为 JSON

问题是ASP.Net Ajax没有安装和配置。

于 2014-06-12T14:43:32.140 回答