使用 ajax() 和 jsonp 调用 asp.net 远程 Web 服务 .asmx 时出现意外令牌 <

Posted

技术标签:

【中文标题】使用 ajax() 和 jsonp 调用 asp.net 远程 Web 服务 .asmx 时出现意外令牌 <【英文标题】:unexpected token < when calling asp.net remote webservice .asmx using ajax() and jsonp 【发布时间】:2013-05-05 04:40:50 【问题描述】:

我有一个非常基本的 - 用于测试 - 用 VB 编写的 ASP.net Web 服务(2.0 和 IIS 6.0),在远程服务器上运行

网络服务

 <WebService(Namespace:="CMS_ChecklistSystemWebService")> _
 <WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
 <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
 <System.Web.Script.Services.ScriptService()> _
 Public Class CMS_ChecklistSystemWebService
    Inherits System.Web.Services.WebService
    <WebMethod()> _
    Public Function HelloWorld() As String
        Return "Hello World"
    End Function

配置。

为了能够在浏览器中运行webservice,我必须将以下几行添加到我的webservice 配置中

<system.web>
    <webServices>
        <protocols>
            <add name="HttpGet"/>
            <add name="HttpPost"/>
        </protocols>
    </webServices>
</system.web>

**网络服务成果**

我试图使用 AJAX JQUERY 运行 XAMPP v3.1php 页面调用此 web service

JQUERY

  $.ajax(
        type: "GET",
        url: "http://192.168.25.11/link to web service",
            data: "",
            dataType: "jsonp",
            contentType: "application/jsonp; charset=utf-8",
            success: function(data) 
                console.log(data);
            
        );

错误

以下是调用ajax() 函数后我的控制台的样子

仅供参考,如果我单击第二行中的链接,它会将您链接到webservice 并像第一张图片一样运行它

通知

如果我在同一个项目(域)中使用相同的webservice,我可以轻松地进行ajax() 调用和type='json',它可以完美运行而没有错误

问题

我做错了什么? 我是否需要让Webservice 返回一个JSON 对象而不是XML 如果是,那么如何

【问题讨论】:

Web 服务需要返回由适当的 jsonp 回调包围的有效 JSON 然后我发现的只是将 _ 添加到 Web 服务,但它没有工作 很明显里面什么都没有 【参考方案1】:

我认为,Rumit 在这里只给出了部分答案。您当然需要将 Web 服务设置为返回 JSON 而不是 XML。

但是,您已经声明您正在设置 dataType: "jsonp" 这要求您在方法调用中返回 JSON,方法名称是上面第二张图片中 callback 键的值。

例如,它看起来像这样:

jQuery1910366312976758182(data: "Hello World")

*不完全是,但一步一步来,你会明白的......

【讨论】:

【参考方案2】:

我认为问题在于,您在 ajax 调用中将内容类型指定为 json。但是,您的 Web 服务正在返回 xml。

因此,您可以在ajax调用中将内容类型指定为xml并处理xml(我不确定是否可能),或者您可以配置Web服务以返回json。

请参阅此 SO 问题 (How to return JSON from a 2.0 asmx web service) 以配置 Web 服务以返回 json。

【讨论】:

以上是关于使用 ajax() 和 jsonp 调用 asp.net 远程 Web 服务 .asmx 时出现意外令牌 <的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 跨域请求之jQuery的ajax jsonp的使用解惑 (转载)

使用 JQuery Ajax 和 JSONP 调用 OData 服务

收到错误“JSONP 注入脚本未调用回调。”使用 Angular 2 和服务器 ASP.NET 核心

如何在 JavaScript 中使用 JSONP 请求执行 Ajax 调用? [复制]

使用 jQuery jsonp 跨域调用到 ASP.NET Web 服务

如何在 jsonp ajax 调用中使用类型:“POST”