0

これが方法です

 [WebMethod]
   public static string[] GetCustCodeFromCustomerName(string[] custName)
   {
       if (custName.Length == 0)
           return null;
       else
       {
           List<string> items = new List<string>();
           StringBuilder custList = new StringBuilder();
           string custListstr = string.Empty;
           for (int i = 0; i < custName.Length; i++)
               custList.Append(custName.ElementAt(i) + ", ");
           custListstr = custList.ToString().Substring(0, custList.Length - 2);
           try
           {
               SqlCommand cmd = new SqlCommand();
               SqlDataReader sdr;
               DataSet ds;
               cmd.CommandText = "sp_sel_custcodeFromCustName";
               cmd.CommandType = CommandType.StoredProcedure;
               cmd.Parameters.AddWithValue("@customercodeinlist", custListstr);
               cmd.Parameters.AddWithValue("@BranchId", Globals.BranchID);
               cmd.Parameters.AddWithValue("@Flag", 1);
               sdr = AppClass.ExecuteReader(cmd);
               ds = AppClass.GetData(cmd);
               while (sdr.Read())
               {
                   items.Add("" + sdr.GetValue(0));
               }
               sdr.Close();
               sdr.Dispose();
               return items.ToArray();
           }
           catch (Exception)
           {
               return null;
           }
       }
   }

このように呼んでいます...

custList = $(':checkbox:checked').map(function () { return    $(this).closest('tr').find('.grdCustName').text() }).get();

         $.ajax({
                type: "post",
                url: "~/AutoComplete.asmx/GetCustCodeFromCustomerName",
                data: "{custName:'" + custList + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert(textStatus);
                },
                success: function (result) {
                    alert("success" + result);
                }
            });

私はさまざまな組み合わせを試しましたが、ポストの代わりに と を使用しませんでしたが、これまでのところ何も機能していないようcontentTypeですdatatypeget誰でも助けることができますか?

4

2 に答える 2

1

~オペレーターを削除する必要があり、Webservice コードと json パラメーターに問題があると思います。

サンプルを見てください (.aspx と .asmx の両方が webapp のルートにあります)。

サンプル.aspx


<script type="text/javascript">
    $(function () {
        $("#button1").click(function () {
            /* data parameter - array */
            var param = "{'custName': ['aa','bb','cc']}";

            $.ajax({
                type: "POST",
                url: "SampleWs.asmx/GetList",
                data: param,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {
                    console.log(data);
                    alert(data.d);
                },
                error: function (xhr, textStatus, errorThrown) {
                    console.log(textStatus + " : " + errorThrown);
                }
            });
        });
    });
</script>

SampleWs.cs


[WebService(Namespace = "http://localhost/jquery/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class SampleWs : System.Web.Services.WebService {
    [WebMethod]
    [ScriptMethod(ResponseFormat=ResponseFormat.Json)]
    public   string[] GetList(string []custName)
    {
        for (int i = 0; i < custName.Length; i++)
            custName[i] = custName[i].ToUpper();
        return custName;  
    }
}
于 2012-08-22T07:45:01.597 に答える
0

.get()この行の最後に、引数なしでへの呼び出しがあります。

custList = $(':checkbox:checked').map(function () { return    $(this).closest('tr').find('.grdCustName').text() }).get();

削除することを検討してください。

~また、他の人が言及しているように、サーバー側のコードでのみ機能するため、URL から文字を削除する必要があります。

于 2012-08-22T07:53:01.377 に答える