You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jQuery调用WebService持续返回0错误,寻求解决方案

搞定ASMX WebService的AJAX调用问题

嘿,我看你折腾了半天各种配置还是没法调用那个ASMX服务,不过好在有.NET能正常调用的参考,咱们先从你贴的代码入手找问题:

1. 先把代码的语法坑填上

你写的AJAX代码里data对象没闭合,还漏了几个必填参数(name、subject、emailFrom),最后连闭括号都没写完,这肯定跑不起来啊!先把语法补全:

$('#btnCallService').click(function () {
    $.ajax({
        type: 'POST',
        url: 'http://asr.eduka.info/webservice/ASREmployeeTransfer.asmx/SendEmail',
        dataType: 'text',
        data: { 
            "message": "hello world.", 
            "phone": "2342342...",
            "name": "Patrick Gan",
            "subject": "Test",
            "emailFrom": "fspatrick@hotmail.com"
        }
    });
});

2. 适配ASMX服务的请求格式

ASMX服务对请求格式是有要求的,默认它认application/x-www-form-urlencoded,不过如果服务端开了JSON支持,用JSON格式更稳妥。我给你两种可行的配置:

方案一:Form-UrlEncoded格式(和.NET调用的格式对齐)

jQuery会自动把data里的对象转成form格式,你只需要确保参数名和服务端的SendEmail方法参数完全一致:

$('#btnCallService').click(function () {
    $.ajax({
        type: 'POST',
        url: 'http://asr.eduka.info/webservice/ASREmployeeTransfer.asmx/SendEmail',
        dataType: 'text',
        data: { 
            "message": "hello world.", 
            "phone": "2342342...",
            "name": "Patrick Gan",
            "subject": "Test",
            "emailFrom": "fspatrick@hotmail.com"
        }
    })
    .done(function(res) {
        console.log("成了!返回内容:", res);
    })
    .fail(function(xhr, err) {
        console.error("凉了:", err);
        // 这里可以看服务返回的具体错误,很有用
        console.log("服务返回的错误详情:", xhr.responseText);
    });
});

方案二:JSON格式(更清晰,适合复杂参数)

如果服务端支持JSON,直接用这个格式,记得要显式设置contentType,还要把数据序列化成JSON字符串:

$('#btnCallService').click(function () {
    $.ajax({
        type: 'POST',
        url: 'http://asr.eduka.info/webservice/ASREmployeeTransfer.asmx/SendEmail',
        contentType: "application/json; charset=utf-8", // 这个必须加
        dataType: 'json', // 如果服务返回JSON就用这个,text也可以
        data: JSON.stringify({ 
            "message": "hello world.", 
            "phone": "2342342...",
            "name": "Patrick Gan",
            "subject": "Test",
            "emailFrom": "fspatrick@hotmail.com"
        })
    })
    .done(function(res) {
        console.log("调用成功!返回:", res.d); // ASMX返回的JSON通常包在d属性里
    })
    .fail(function(xhr, err) {
        console.error("调用失败:", err);
        console.log("服务错误信息:", xhr.responseText);
    });
});

3. 排查跨域问题

如果你的页面和asr.eduka.info不是同一个域名,那肯定会有跨域问题!.NET应用可能是同域调用或者已经配置了CORS,而前端AJAX需要服务端开启跨域支持(比如在ASMX服务里加响应头,或者改Web.config)。你可以打开浏览器的开发者工具,看Console面板有没有跨域相关的报错,或者Network面板里的请求是不是直接被拦截了。

4. 确认服务的权限和参数匹配

别忘了检查ASMX服务的SendEmail方法是不是加了[WebMethod]标记,参数名和你传的要完全一致(虽然ASMX默认不区分大小写,但尽量对齐不容易错)。另外,如果.NET调用的时候需要传凭证(比如Cookie、Token),那你的AJAX也要对应加上,比如用xhrFields: { withCredentials: true }配置。

最后,强烈建议你用浏览器的开发者工具抓请求,看请求的状态码、参数有没有传对、服务返回的具体内容,这些信息能帮你快速定位问题!

内容的提问来源于stack exchange,提问作者Rich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:31:42