Ajax 调用将字符串传递给 Web 服务并返回 String[]
Posted
技术标签:
【中文标题】Ajax 调用将字符串传递给 Web 服务并返回 String[]【英文标题】:Ajax call passing string to webservice and getting String[] back 【发布时间】:2016-05-29 08:30:02 【问题描述】:我是 Ajax 和 Web 服务的新手,并试图在我的 javascript 代码中进行 Ajax 调用,它将一个字符串传递给我的 Web 服务方法 (C#)。 之后,webservice 方法必须返回一个字符串数组,我想在我的 Ajax 成功方法中循环该数组。 有谁知道如何实现这一点?
我不工作的尝试:
$.ajax(
type: "POST",
url: "MyWebService.asmx/getMembers",
data: groupname,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data)
alert("Success");
for (var i = 0; i < data.length; i++)
alert(JSON.parse(data[i]));
);
“groupname”是一个字符串变量,“data”应该是一个数组。 有什么建议吗?
我应该对 contentType 使用“text”吗?是否有 dataType:“String[]”?
网络服务代码:
[WebMethod]
public String[] getMembers(String groupname)
...
return userArray;
webservice 方法有效。我已经测试了它将结果写入 CSV 文件。所以问题一定是参数或者返回值。
【问题讨论】:
你能做console.log(data)
并显示结果是什么
1-什么是“不工作”?请更具体一点,2-查看需要的服务器代码。
您是否验证过您的网址实际上正在返回某些内容?发布服务器返回的日志
Ajax调用的error方法返回parsererror。它永远达不到成功的方法,那是行不通的。我认为这是因为它返回一个 String[] 并且 Ajax 调用需要一些 json。
【参考方案1】:
警告:无法测试。
服务器端
在您的网络服务中设置 JSON 内容类型响应标头并填充 JSON 对象:
private class Payload
public String[] payload;
...
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string getMembers(String groupname)
...
Payload p = new Payload();
// populate
return new JavaScriptSerializer().Serialize(p);
如果你有这样的事情,请通过调用你的网络服务来检查:
"payload":["string1","string2","string3"]
客户端
在您的 AJAX 调用中保留 JSON contentType,然后在 javascript 中对其进行解析:
...
success: function(data)
alert("Success");
for (var i = 0; i < data.payload.length; i++)
alert(data.payload[i]);
【讨论】:
webservice方法的Parameter应该选择哪种数据类型,返回值应该选择哪种数据类型? webservice的参数保持String
,你可以使用本教程的JSON部分返回上面的JSON:c-sharpcorner.com/UploadFile/8ef97c/…(TL:DR在[WebMethod]
下添加[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
并返回一个东西)。编辑我的答案
Ajax 酷炫中的数据参数在您的示例中看起来如何?以上是关于Ajax 调用将字符串传递给 Web 服务并返回 String[]的主要内容,如果未能解决你的问题,请参考以下文章
将 knockoutjs 视图模型传递给多个 ajax 调用
如何使用 jQuery 将 Windows 身份验证传递给 Web 服务?
对 Web 服务的 jQuery Ajax 调用似乎是同步的