【问题标题】:Uncaught SyntaxError: Unexpected token < -- in jQuery ajaxUncaught SyntaxError: Unexpected token < -- 在 jQuery ajax 中
【发布时间】:2012-12-12 18:32:56
【问题描述】:

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

错误 -->

Uncaught SyntaxError: Unexpected token &lt;

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
}

在这里问之前我已经通过了这个link(看不懂)

编辑:

从这个 post 得到了替代答案。

【问题讨论】:

  • 确保最后没有&lt;&lt;/script&gt; 标签。
  • 这可能是 POSTjsonp 的组合,如果没有一些黑客攻击,它们是不兼容的 - 请参阅 stackoverflow.com/questions/2699277/post-data-to-jsonp
  • 我没有做过任何asp.netstackoverflow.com/questions/2380551/… 可能会有所帮助。问题似乎是您使用的是jsonp,它将?callback=? 添加到URL 的末尾。 URL 的处理程序(您的 Web 服务)也必须编码为返回 padded 响应,即包装在 JavaScript 函数调用中的响应。我怀疑你只是想对该 URL 执行一个简单的 ajax GET,它只返回一个简单的 JSON 响应。
  • @Liam ERROR 500,如果我使用 url: "http://localhost:12015/myWebService.asmx/GetCategories" 和 ERROR,unexpected token &lt; 如果我使用 url: "http://localhost:12015/myWebService.asmx?op=GetCategories"
  • 哇哦!那么,当您运行包含 javascript 的站点时,它的 url 是什么?它是否以localhost:12015 开头?如果不是,您不能这样做,它会破坏安全协议:en.wikipedia.org/wiki/Same_origin_policy。 @andyb 一开始就是这么说的。如果它是同一解决方案中的不同项目,它将是具有不同 url 的不同站点。

标签: jquery asp.net ajax web-services


【解决方案1】:

当您的网站和 Web 服务在两个不同的项目中运行时,您发现您打破了 Same origin policy

Webservice 和网站移到同一个项目中,它应该可以工作。

你的 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);
      }
   });
}

操作位仅用于在 Web 浏览器中进行测试。删除它,你应该会很好。

公平地说,PS @andyb 不久前提出了这个答案,但不清楚这是否是问题所在! 更新

今天我在这方面做了一些不切实际的猜测,我已经澄清了一些我认为我会分享的观点。你必须 POST.asmx 服务,你不能做这个跨域。您可以跨域触发GET,但不能触发POST,所以我认为这是路由问题。

您可以启用GET,请参阅How to call an ASMX web service via GET?。但这似乎是个坏主意,因为它会将您的网络服务暴露给所有人!

【讨论】:

  • +1 抱歉,我无法参与聊天,但这似乎与上述问题中的 cmets 一致 :-)
【解决方案2】:

不是对您问题的直接回答 - 但以下是我为解决类似问题必须做的事情

How to force datatype as JSON in ASP.Net 2.0

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-29
    • 2016-10-30
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 2016-04-06
    相关资源
    最近更新 更多