2

我想使用 ajax 和 webservice 将数据从 JavaScript 插入数据库,我有一些控件,通过 jQuery 我获取它们的值并制作它们的值数组。

当我发送数组时,会导致此错误:

无法将“System.String”类型的对象转换为“System.Collections.Generic.List1[System.String]”类型

var variables = Array();
var i=0;
$('#Div_AdSubmition').find('.selectBox').each(function () {
    variables[i] = $(this).find('.selected').find(".text").html();
    i++;
});

$.ajax({
    type: 'post',
    data: "{ 'a':'" +variables + "'}",
    dataType: 'json',
    url: 'HomeWebService.asmx/insertAd',
    contentType: 'application/json; charset=utf-8',
    success: function (data) {

        alert("data : " + data.d);
    }
});

这是 C# 代码

[WebMethod]
public object insertAd(List<string> a)
{
    return a;
}
4

3 回答 3

1

您需要像这样设置调用data参数:$.ajaxJSON.stringify({'a': variables})

JSON变量在 < IE8 中不可用,因此您需要包含一个类似于此处JSON答案中提到的实现

此外,您在该功能中有一个额外}success功能。

因此,将来,如果您想为传递给 Web 服务的数据对象添加额外的参数,您可以像这样构造它:

var someArr = ['el1', 'el2'];

JSON.stringify({ 
  'param1': 1,
  'param2': 'two'
  'param3': someArr
  // etc
});

JavaScript:

var variables = Array();

var i = 0;
$('#Div_AdSubmition').find('.selectBox').each(function () {

  variables[i] = $(this).find('.selected').find(".text").html();

  i++;
});



$.ajax({
    type: 'post',
    data: JSON.stringify({'a': variables}),
    dataType: 'json',
    url: 'HomeWebService.asmx/insertAd',
    contentType: 'application/json; charset=utf-8',
    success: function (data) {

      alert("data : " + data.d);
    });

});

C#

[WebMethod]
public object insertAd(List<string> a)
{
  return a;
}
于 2013-08-13T12:21:43.680 回答
1

data:要发送到服务器的数据。如果还不是字符串,则将其转换为查询字符串。它附加到 GET 请求的 url。请参阅 processData 选项以防止此自动处理。对象必须是键/值对。如果 value 是一个 Array,jQuery 会根据传统设置的 value 序列化多个具有相同 key 的值。

因此,尝试向您的 ajax 调用添加一个新参数:

$.ajax({
    type: 'post',
    data: { 'a': variables }, // Notice some changes here
    dataType: 'json',
    traditional: true, // Your new parameter
    url: 'HomeWebService.asmx/insertAd',
    contentType: 'application/json; charset=utf-8',
    success: function (data) {
        alert("data : " + data.d);
    }
});

试试这个方法。也许您需要更改 Web 服务方法以期望使用arraya 而不是 a List,但我不确定。

于 2013-08-13T12:22:32.527 回答
1

试试这个

            data: JSON.stringify({ 'a': variables }),
于 2013-08-13T12:26:06.380 回答