【问题标题】:Get xml response instead of json获取 xml 响应而不是 json
【发布时间】:2014-04-15 13:25:04
【问题描述】:

我正在使用 jquery ajax 调用我的网络服务:

$.ajax({
    type: sType,
    url: "myWebService.asmx",
    cache: serviceCash,
    data: params,
    accepts: {
        text: "application/json"
    },
    contentType: contentType,
    dataType: "json"
    ....

Web 服务如下所示:

[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetLang(string cLang, string iLangVersion ){
//code to create json string
return jsonResp;
}

当我输入:POST evertyhing 完美无缺。

type: "POST",
data: "{ 'clang':'ANG', 'iLangVersion' : '1'}",
contentType:"application/json; charset=UTF-8",
dataType: "json"

响应是纯json:

{"d":"{\"userSettingsData\":{\" ...and so on

当我将请求更改为 GET 方法时:

type: "GET",
data: "clang=ANG&iLangVersion=1",
contentType:"application/x-www-form-urlencoded; charset=UTF-8",
dataType: "json"

响应是xml:

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">{"translation":"\r\n{\"translation\":{\"..and so on

我应该改变什么才能像以前一样以 json 格式获得响应? 因此,我将 url 编码的数据发送到 Web 服务,作为回报,我想获取 json 而不是 XML! 我已经定义了 dataType: "json" - 你期望从服务器返回的数据类型 我设置了接受类型:接受:{text: "application/json"} - 告诉服务器它将接受什么样的响应作为回报。

但我得到了 xml 作为回报。我应该改变什么?

【问题讨论】:

  • 这一切都取决于服务器端的 API。详情请联系开发者。

标签: jquery ajax xml json


【解决方案1】:

好吧,如果您可以控制发送返回的脚本,您应该发布该代码。如果您无法控制该脚本,那么最好的办法是在您的发布请求中设置 dataType: "xml" 并以这种方式处理它。

如果不从处理您的请求的脚本中执行此操作,您将无法真正将 XML 强制转换为 JSON。

【讨论】:

  • 好吧,如果请求是 GET(不是 POST),我认为不可能强制服务器返回带有请求标头的 json。我发现的唯一方法是直接进入 Context 对象。否则,它将始终返回 xml。因此,一种选择是在客户端解析 xml 并从 xml 获取 json。我尝试过的其他选项:Context.Response.Clear(); Context.Response.ContentType = "应用程序/json"; Context.Response.Write jsonObject 返回;但是我得到输入符号(或类似的东西)作为 ws 响应中的第一个和最后一个字符。我怎样才能删除它?
  • 如果服务器正在返回 XML,则无法在不先解析 XML 的情况下强制它返回 JSON。如果我创建一个我设置为返回“Hello”的脚本,我不能强制它通过 javascript 返回其他内容,我必须在脚本本身中更改它。
  • Slugge,我说的是网络服务(服务器)脚本。我的 Web 服务 [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 有这个标头,我在 Web 服务结束时返回 json 字符串。但无论如何,响应都会被包装到 xml 中。如果您通过 GET 方法调用 Web 服务,则响应始终为 xml,只有 POST 方法将响应为 json。正如我所提到的,我发现的唯一方法是清除当前的响应并自己编写。但是我在 json 响应的前面和结尾多了一个字符(我认为是输入),这会破坏 json 解析器。
【解决方案2】:

这取决于服务器端进程的编写方式,但在第一段代码中,您告诉服务器您需要 JSON 响应:

accepts: {
    text: "application/json"
},

如果您也将其添加到第二个请求中,这可能会起作用。

否则,您将需要更仔细地检查服务器端代码,以了解它使用什么逻辑来确定响应类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 2021-03-31
    相关资源
    最近更新 更多