2

我有一个 jQuery Ajax WebMethod 调用,如下所示:

<script type="text/javascript">
    $(document).ready(function () {
        $("#btnsubmit").click(function () {

            var arr = new Array();
            arr.push($("#control1").val()); arr.push($("#control2").val()); arr.push($("#control13 option:selected").val()); arr.push($("#control4 option:selected").val()); arr.push($("#control15 option:selected").val());

            var requestedData = JSON.stringify(arr);
            requestedData = "{'details':'" + requestedData + "'}";

            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: "EmployeeDemotion.aspx/Save",
                data: requestedData,
                dataType: "json",
                success: function (result) {
                  //check the value returned from the WebMethod and provide alerts accordingly

                },

                error: function (result) {
                    alert("Error");
                }

            });
        });

    });
</script>

并且,WebMethod 如下:

 [WebMethod(EnableSession = true)]
     public static InsertDetails[] Save(string details)
        {

            DataTable dt = new DataTable(); DataTable dts = new DataTable();

            List<InsertDetails> data = new List<InsertDetails>();
            JavaScriptSerializer js = new JavaScriptSerializer();
            string[] Tags = js.Deserialize<string[]>(details);
            object[] obj = new object[8];
            obj[0] = Tags[0].ToString(); obj[1] = Tags[1].ToString(); obj[2] = Tags[2].ToString(); obj[3] = Tags[3].ToString();
            obj[4] = Tags[4].ToString(); 


            int a = //say condition 1
            int b = //say condition 2
            if (a< b)
            {

             //insert into database and set a value which says the insertion has succeeded

            }
            else
            {
                //alert that data cannot be inserted
            }

            return data.ToArray();
        }

现在,我需要将任何可能类型(布尔、数组、字符串、整数或其他)的值返回给 ajax 方法,以便 ajax 方法中的成功函数提醒插入状态(如代码段中所述),即;应与最后一条语句“return data.ToArray();”一起返回一个值 到ajax方法。我不需要返回元素“数据”,验证插入的值应该与“数据”一起返回或以任何其他形式返回。

4

1 回答 1

4

不知道你想要什么。您是否希望将数据和标志都返回到客户端函数或只是标志。

  • 案例1:你想要的只是返回一条关于内部发生的动作的消息save

    只需像这样更改您的保存方法

    [WebMethod(EnableSession = true)]
    public static string Save(string details)
    {
          string message =string.Empty;
    
          /// rest of the usual code of yours   
          ///
          if (a< b)
          {
             //rest of the code
             message = "Insertion Successful";
          }
          else
          {
             //rest of the code
             message = "Error Occured";
          }
    }
    

    并在 ajax 内的客户端success,简单地执行以下操作:

    success: function (result) {
                   alert(result.d);
    }
    
  • 案例2:如果插入成功,您也想发送数据

    制作一个包装器并将数据和标志都附加到它上面。对其进行序列化,然后将其发送到客户端函数。IE

    //wrapper class
    public class ServiceResponse
    {
       public bool IsSuccess {get;set;}
       public string Message {get;set;}
    }
    

    现在在你里面save这样做:

    [WebMethod(EnableSession = true)]
    public static string Save(string details)
    {
          ServiceResponse serviceResponse =new ServiceResponse();
    
          /// rest of the usual code of yours   
          ///
          if (a< b)
          {
             //rest of the code
              serviceResponse.IsSuccess= true;
              serviceResponse.Message = String.Join(",",data.ToArray());
          }
          else
          {
             //rest of the code
             serviceResponse.IsSuccess = false;
          }
    
        return new JavaScriptSerializer().Serialize(serviceResponse);
    }
    

    并在您的客户端方法中使用它,例如:

      success: function (result) {
              var jsonData = $.parseJSON(result.d);
              if(jsonData.IsSuccess){
                  alert('success');
                  grid.data(jsonData.Message);
              }
              else{
                  alert('failure');
              } 
      }
    
于 2013-05-13T15:21:17.070 回答