【问题标题】:Why does web service not return string properly?为什么 Web 服务不能正确返回字符串?
【发布时间】:2018-12-22 06:04:39
【问题描述】:

我有 ajax 函数可以将一些字符串发送到 web 服务。

这里是ajax:

    var data = "wkt=" + wkt;
    $.ajax({
        url: "....some path",
        type: "POST",
        data: data, 
        crossDomain: true,
        dataType: "text",
        success: function (response) {
            alert(response);
        },
        error: function () {
            console.log('Request Failed.');
        }
    });

这里是网络服务:

    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    [System.Web.Script.Services.ScriptService]
    public class ValveService : System.Web.Services.WebService
    {
        [WebMethod]
        public string ExecuteQuery(string wkt)
        {
                 return "dummy!";
        }
    }

作为响应,我得到了这个字符串:

    "<?xml version="1.0" encoding="utf-8"?><string xmlns="http://tempuri.org/">dummy!</string>"

虽然我希望得到响应“dummy!”。

知道为什么我会得到这个奇怪的响应,以及如何只获取从服务发送的字符串(在我的例子中是“dummy!”)吗?

【问题讨论】:

  • 这是一个asp.net网络问题,我不是专家,所以我会让其他人真正回答这个问题。但是,我将专注于弄清楚为什么您的服务使用 XML 而不仅仅是字符串进行响应。
  • 你告诉你的 AJAX 期望什么作为返回,但它看起来不像你在实际返回上设置响应头,所以它默认为 XML。您需要在返回时将内容类型设置为纯文本
  • @Nerdi.org 如何从 xml 中获取所需的字符串?是否必须解析它?
  • 好吧,我希望您可以在 Executequery 返回时设置一个 ResponseHeader 或其他内容...不过请查看:stackoverflow.com/questions/3214384/…

标签: javascript asp.net ajax web-services asmx


【解决方案1】:

我很确定 Web 服务只返回 xml 或 json。可能有一种解决方法,在服务中设置响应类型,但我不确定。 [编辑:我看到 Nerdi.org 已经暗示了这一点。]

dataType: 'text' 时,响应头不只是文本,而是Content-Type: text/xml; charset=utf-8,你会得到 xml。

使用 json(它是一个字符串)并使用它。

//var data = "wkt=" + wkt;
$.ajax({
    url: "/path to/ExecuteQuery",
    type: "POST",
    data: JSON.stringify({ wkt: wkt }),
    contentType: "application/json; charset=utf-8", // this will be the response header.
    crossDomain: true,
    dataType: "json",
    success: function(response) {
        // response is a wrapper. your data/string will be a value of 'd'.
        alert(response.d);
    },
    error: function() {
        console.log('Request Failed.');
    }
});

【讨论】:

    【解决方案2】:

    另一种选择:

    [WebMethod]
    public void ExecuteQuery(string wkt)
    {
        Context.Response.Output.Write("dummy " + wkt);
        Context.Response.End();
    }
    

    【讨论】:

    • 或者该方法可以说它返回一个字符串,并在末尾添加return string.Empty;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    相关资源
    最近更新 更多