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 服务?

将对象数组从 Ajax 函数传递到 Web 服务

对 Web 服务的 jQuery Ajax 调用似乎是同步的

将信息从 javascript 传递到 django 应用程序并返回

ajax使用