2013-02-07 130 views
1

我必须在Web服务中工作,其中一个工作正常接收两个参数,我可以执行它,但另一个也接收参数不起作用粘贴此函数和我的Ajax代码,所以你可以帮助我看看发生了什么。jquery ajax将参数传递给webservice

html 

<script type="text/javascript"> 
    function CallService() { 
     $.ajax({ 
      type: "POST", 
      url: "findMe.asmx/locateMe2", 
      crossDomain:true, 
      data: '{value1: ' + $("#txtValue1").val() + ', value2: ' + $("#txtValue2").val() + '}', 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: OnSuccess, 
      error: OnError 
     }); 

    } 

    function OnSuccess(data, status) { 
     $("#lblResult").html(data.d); 

    } 

    function OnError(request, status, error) { 
     $("#lblResult").html(request.statusText); 

    } 


</script>  

</head> 
<body> 
<form id="frmCoords" runat ="server" > 
    <div> 
<table> 
    <tbody> 
     <tr> 
      <th> 
       Value 1: 
      </th> 
      <td> 
       <asp:TextBox ID="txtValue1" runat="server" /> 
      </td> 
     </tr> 
     <tr> 
      <th> 
       Value 2: 
      </th> 
      <td> 
       <asp:TextBox ID="txtValue2" runat="server" /> 
      </td> 
     </tr> 
    </tbody> 
</table> 

<asp:Button ID="btnGo" Text="Go" OnClientClick="CallService(); return false;" runat="server" /> 

<asp:Label ID="lblResult" Text="&nbsp;" Width="100%" runat="server" ForeColor="black" /> 
    </div> 

</form> 


--webservice 
[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService] 


    [WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 

    public int Add(int value1, int value2) 
    { 
     return value1 + value2; 
    } 

    public string locateMe2(Double value1, Double value2) 
    { 

     FormClosingEventArgs ee = new FormClosingEventArgs(CloseReason.UserClosing, false); 
     DialogResult dlgResult = MessageBox.Show("", "Cadena", MessageBoxButtons.OK, MessageBoxIcon.Information); 

     SqlConnection Conn = new SqlConnection(); 
     Conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Audi.Properties.Settings.ConexionSql"].ConnectionString); 
     string procedure = "usp_PointInPolygon"; 

     SqlCommand cmd = new SqlCommand(procedure, Conn); 
     SqlDataReader reader; 


     //cmd.CommandText = "usp_PointInPolygon"; 
     cmd.CommandType = CommandType.StoredProcedure; 
     //cmd.Parameters.Clear(); 
     SqlParameter param1; 
     SqlParameter param2; 
     param1 = cmd.Parameters.Add("@lat", SqlDbType.Float,14); 
     param2 = cmd.Parameters.Add("@lng", SqlDbType.Float,14); 

     param1.Value = value1; 
     param2.Value = value2; 

     Conn.Open(); 

     reader = cmd.ExecuteReader(); 
     string column = ""; 
     while (reader.Read()) 
     { 
      column = reader["county"].ToString(); 
      //int columnValue = Convert.ToInt32(reader["ColumnName"]); 
     } 
     Conn.Close(); 

     return column; 

    } 

功能添加做工精细,它接收两个int值,谁也接收到的纬度和经度,并彩车不起作用值的功能locateMe2,你看到什么了吗?

the locateMe2 function will return just a string 
+0

你看到什么回来的浏览器/ Firebug的控制台在运行时? –

+0

为什么crossDomain设置为true?您是否在使用CORS进行同域申请? –

+0

我猜想第二个方法'locateMe2'没有接收到你缺少属性'[WebMethod]'和 '[ScriptMethod(ResponseFormat = ResponseFormat.Json)]''的参数。 – dee

回答

-1
var params = {value1: $("#txtValue1").val(), value2: $("#txtValue2").val()}; 
function CallService() { 
    $.ajax({ 
     type: "POST", 
     url: "findMe.asmx/locateMe2", 
     crossDomain:true, 
     data: JSON.stringify(params), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: OnSuccess, 
     error: OnError 
    }); 
} 

值可以直接被置为字符串“数据”的设置把设定值以外的AJAX方法有助于监控从变量或元素中获得价值,当你写的东西特别,和“字符串”方法有助于将值放在字符串形状中,因为它是必需的。

+0

考虑添加一些细节或解释为什么这个片段解决了这个问题。 –