无法第二次调用Web服务来自jQuery

时间:2011-09-17 16:44:50

标签: jquery asp.net web-services json telerik

我无法从jQuery函数代码第二次调用Web服务。

页:

<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
<script type="text/javascript">
function getCityByPinCode() {
        var path = '<%=ConfigurationManager.AppSettings["AutoComplete"].ToString() %>';
        $.ajax({
            type: "POST",
            url: "" + path + "/CityBasedOnPinCode",
            data: "{pincode: '" + $("#<%=ntxbPostCode.ClientID%>").val() + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: OnSuccess,
            error: OnError
        });
    }
    function OnSuccess(data, status) {
        var city = document.getElementById('<%= tbxCity.ClientID %>');
        var val1 = data.d;
        document.getElementById("ContentPlaceHolder1_CompanyDetails1_tbxCity").value = val1;
    }

    function OnError(request, status, error) {
        alert(request.statusText);
    }
</script>
</telerik:RadCodeBlock>
<body>
 <telerik:RadNumericTextBox ID="ntxbPostCode" runat="server" DataType="System.Int32"
    MaxLength="4" TabIndex="4" Width="95%" DecimalDigits="0" ClientEvents-OnValueChanged="getCityByPinCode()">
 </telerik:RadNumericTextBox>

 <asp:TextBox ID="tbxCity" runat="server" Width="95%" TabIndex="5"></asp:TextBox>
</body>

网络服务:

public string CityBasedOnPinCode(string pincode)
{
    int pcode = 0;
    int.TryParse(pincode, out pcode);
    List<usp_CityBasedOnPinCodeResult> lstCity = new CityDA().CityBasedOnPincode(pcode);
    return lstCity[0].CityName.ToString();
}

我想在输入密码的基础上填写城市文本框。所以当用户输入密码时,他/她会自动获取城市名称。当我把pincode的值预定义时,它给了我完美的结果但是当我输入新值时我得到的错误如下

  

Microsoft JScript运行时错误:预期的对象。

请注意,如果我在页面加载时间(编辑时间)中有文本框中的密码值,那么我在获取文本框的值后得到正确的值但没有获得值。 jQuery包含在母版页中。所以不包括在内。

1 个答案:

答案 0 :(得分:0)

由于您订阅了RadNumericTextBox提供的客户端事件,因此在代码中使用事件参数可能更容易,而不是使用选择器来获取值。您可以看到如何从OnValueChanged事件right here获取新值的示例。

除此之外,当我将代码更改为以下内容时,我的一切工作正常:

<script type="text/javascript">
    function getCityByPinCode(sender, eventArgs) {
        //do stuff
    }
</script>

<telerik:RadNumericTextBox ID="ntxbPostCode" runat="server" DataType="System.Int32"
    MaxLength="4" TabIndex="4" Width="95%" DecimalDigits="0" ClientEvents-OnValueChanged="getCityByPinCode">
</telerik:RadNumericTextBox>
<br />
<asp:TextBox ID="tbxCity" runat="server" Width="95%" TabIndex="5"></asp:TextBox>

这阻止了事件在初始页面加载时触发(与代码一起),并且还确保我设法使用 get_newValue()函数获取RadNumericTextBox的新值。 / p>

小注意:您应该能够在OnSuccess函数中使用city变量来设置其值,而不是再次调用getElementbyID。