来自WebMethod的jQuery空白结果
我试图通过jQuery运行webmethod,jQuery将根据一对级联Dropbox的内容查询SQL数据库。我尝试调用该方法,并使用各种jQuery获取结果,有一次使用UpdatePanel尝试使其工作,但在每次尝试结束时,我似乎都停留在同一点上,所有代码运行时都没有错误,但是传递给最终标签文本的结果字符串为空 我猜我可能错过了WebMethod中一些非常基本的东西,并想知道是否有人能为我指出正确的方向: 数据库中名为drivers的目标表有4列: model\u id,一个整数,应该是ddlModel。选择editem.Value来自WebMethod的jQuery空白结果,jquery,asp.net-ajax,webmethod,Jquery,Asp.net Ajax,Webmethod,我试图通过jQuery运行webmethod,jQuery将根据一对级联Dropbox的内容查询SQL数据库。我尝试调用该方法,并使用各种jQuery获取结果,有一次使用UpdatePanel尝试使其工作,但在每次尝试结束时,我似乎都停留在同一点上,所有代码运行时都没有错误,但是传递给最终标签文本的结果字符串为空 我猜我可能错过了WebMethod中一些非常基本的东西,并想知道是否有人能为我指出正确的方向: 数据库中名为drivers的目标表有4列: model\u id,一个整数,应该是ddl
model,一个varchar(255),应该是ddlModel。选择editem.Text
驱动程序,一个整数(位已尝试,但对问题没有影响,使用inter以允许记录创建页面正确运行),其中包含1或0,用于定义是否应在结果字符串中使用subs字段
subs,一个varchar(255),其中包含在驱动程序为0时要添加到结果字符串中的数据 我没有详细说明用于填充层叠下拉框的表格,因为它们似乎运行正常,但是如果需要此信息或任何其他信息,请毫不犹豫地询问 我的代码如下: printers.asmx.vb
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Collections
Imports System.Collections.Generic
Imports System.Collections.Specialized
Imports AjaxControlToolkit
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
<WebService(Namespace:="http://printers.mydomainname.com/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
<System.Web.Script.Services.ScriptService()> _
Public Class printers
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function GetMake(ByVal knownCategoryValues As String, ByVal category As String) As CascadingDropDownNameValue()
Dim strConnection As String = ConfigurationManager.ConnectionStrings("PrinterConnection").ConnectionString
Dim sqlConn As SqlConnection = New SqlConnection(strConnection)
Dim strMakeQuery As String = "SELECT * FROM manufacturers ORDER BY make ASC"
Dim cmdFetchMake As SqlCommand = New SqlCommand(strMakeQuery, sqlConn)
Dim dtrMake As SqlDataReader
Dim myMake As New List(Of CascadingDropDownNameValue)
sqlConn.Open()
dtrMake = cmdFetchMake.ExecuteReader
While dtrMake.Read()
Dim strMakeName As String = dtrMake("make").ToString
Dim strMakeId As String = dtrMake("make_id").ToString
myMake.Add(New CascadingDropDownNameValue(strMakeName, strMakeId))
End While
Return myMake.ToArray
End Function
<WebMethod()> _
Public Function GetModel(ByVal knownCategoryValues As String, ByVal category As String) As CascadingDropDownNameValue()
Dim strConnection As String = ConfigurationManager.ConnectionStrings("PrinterConnection").ConnectionString
Dim sqlConn As SqlConnection = New SqlConnection(strConnection)
Dim strModelQuery As String = "SELECT * FROM printers WHERE make_id = @makeid"
Dim cmdFetchModel As SqlCommand = New SqlCommand(strModelQuery, sqlConn)
Dim dtrModel As SqlDataReader
Dim kvModel As StringDictionary = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)
Dim intMakeId As Integer
If Not kvModel.ContainsKey("make") Or Not Int32.TryParse(kvModel("make"), intMakeId) Then
Return Nothing
End If
cmdFetchModel.Parameters.AddWithValue("@makeid", intMakeId)
Dim myModel As New List(Of CascadingDropDownNameValue)
sqlConn.Open()
dtrModel = cmdFetchModel.ExecuteReader
While dtrModel.Read()
Dim strModelName As String = dtrModel("model").ToString
Dim strModelId As String = dtrModel("model_id").ToString
myModel.Add(New CascadingDropDownNameValue(strModelName, strModelId))
End While
Return myModel.ToArray
End Function
<WebMethod()> _
Public Function GetDriver(ByVal model As String) As String
Dim strConnection As String = ConfigurationManager.ConnectionStrings("PrinterConnection").ConnectionString
Dim sqlConn As SqlConnection = New SqlConnection(strConnection)
Dim strDriverQuery As String = "SELECT * FROM drivers WHERE model = @model"
Dim cmdFetchDriver As SqlCommand = New SqlCommand(strDriverQuery, sqlConn)
Dim dtrDriver As SqlDataReader
Dim intModel As Integer
cmdFetchDriver.Parameters.AddWithValue("@model", intModel)
Dim strResult As String = "The selected printer is"
sqlConn.Open()
dtrDriver = cmdFetchDriver.ExecuteReader
dtrDriver.Read()
Dim intDriver As Integer = dtrDriver("driver")
Dim strSubs As String = dtrDriver("subs").ToString
If intDriver = 1 Then
strResult = strResult + "fully compatible with the Windows 2003 Hosted platform."
Else
strResult = strResult + "supported on the Windows 2003 Hosted platform via a subsituted driver:" + strSubs
End If
Return strResult
End Function
End Class
<WebMethod()> _
Public Function GetDriver(ByVal model_id As Integer)
Dim strConnection As String = ConfigurationManager.ConnectionStrings("PrinterConnection").ConnectionString
Dim sqlConn As SqlConnection = New SqlConnection(strConnection)
Dim strDriverQuery As String = "SELECT * FROM drivers WHERE model_id = @model_id"
Dim cmdFetchDriver As SqlCommand = New SqlCommand(strDriverQuery, sqlConn)
Dim dtrDriver As SqlDataReader
Dim intModel As Integer
cmdFetchDriver.Parameters.AddWithValue("@model_id", intModel)
cmdFetchDriver.Parameters("@model_id").Value = model_id
Dim strResult As String = ""
sqlConn.Open()
dtrDriver = cmdFetchDriver.ExecuteReader
dtrDriver.Read()
Dim intDriver As Integer = dtrDriver("driver")
Dim strSubs As String = dtrDriver("subs").ToString
If intDriver = 1 Then
strResult = "<font color=11CC11>The selected printer is fully compatible.</font>"
ElseIf intDriver = 0 Then
strResult = "<font color=FF9933>The selected printer may be compatible via the substitute print driver: " + strSubs + "</font>"
End If
Return strResult
End Function
导入系统.Web
导入System.Web.Services
导入System.Web.Services.Protocols
导入系统集合
导入System.Collections.Generic
导入System.Collections.Specialized
导入AjaxControlToolkit
导入系统数据
导入System.Data.SqlClient
导入系统配置
_
_
_
_
公共类打印机
继承System.Web.Services.WebService
_
公共函数GetMake(ByVal knownCategoryValues为字符串,ByVal category为字符串)为CascadingDropDownNameValue()
Dim strConnection As String=ConfigurationManager.ConnectionString(“PrinterConnection”).ConnectionString
Dim sqlConn As SqlConnection=新SqlConnection(strConnection)
Dim strMakeQuery As String=“按制造商ASC从制造商订单中选择*”
Dim cmdFetchMake As SqlCommand=新SqlCommand(strMakeQuery,sqlConn)
将DTR设置为SqlDataReader
Dim myMake作为新列表(CascadingDropDownNameValue的)
sqlConn.Open()
dtrMake=cmdFetchMake.ExecuteReader
而dtrMake.Read()
Dim strMakeName As String=dtrMake(“制造”).ToString
Dim strMakeId As String=dtrMake(“make_id”)。ToString
添加(新的cascadingdropdownname值(strMakeName,strMakeId))
结束时
返回我的make.ToArray
端函数
_
公共函数GetModel(ByVal knownCategoryValues为字符串,ByVal category为字符串)为CascadingDropDownNameValue()
Dim strConnection As String=ConfigurationManager.ConnectionString(“PrinterConnection”).ConnectionString
Dim sqlConn As SqlConnection=新SqlConnection(strConnection)
Dim strModelQuery As String=“从打印机中选择*,其中make_id=@makeid”
Dim cmdFetchModel As SqlCommand=新的SqlCommand(strModelQuery,sqlConn)
将dtrModel设置为SqlDataReader
Dim kvModel As StringDictionary=CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)
Dim intMakeId为整数
如果不是kvModel.ContainsKey(“make”)或不是Int32.TryParse(kvModel(“make”),intMakeId),那么
一无所获
如果结束
cmdFetchModel.Parameters.AddWithValue(“@makeid”,intMakeId)
Dim myModel作为新列表(CascadingDropDownNameValue)
sqlConn.Open()
dtrModel=cmdFetchModel.ExecuteReader
而dtrModel.Read()
Dim strModelName作为字符串=dtrModel(“模型”)。ToString
Dim STRMODEL As String=dtrModel(“模型id”)。ToString
添加(新的CascadingDropDownNameValue(strModelName,strModelId))
结束时
返回myModel.ToArray
端函数
_
公共函数GetDriver(ByVal模型为字符串)为字符串
Dim strConnection As String=ConfigurationManager.ConnectionString(“PrinterConnection”).ConnectionString
Dim sqlConn As SqlConnection=新SqlConnection(strConnection)
Dim strDriverQuery As String=“从驱动程序中选择*,其中model=@model”
Dim cmdFetchDriver As SqlCommand=新SqlCommand(strDriverQuery,sqlConn)
Dim dtrDriver作为SqlDataReader
整数模型
cmdFetchDriver.Parameters.AddWithValue(“@model”,intModel)
Dim strResult As String=“所选打印机为”
sqlConn.Open()
dtrDriver=cmdFetchDriver.ExecuteReader
dtrDriver.Read()
Dim intDriver作为整数=dtrDriver(“驱动程序”)
Dim strSubs As String=dtrDriver(“subs”)。ToString
如果intDriver=1,则
strResult=strResult+“与Windows 2003托管平台完全兼容。”
其他的
strResult=strResult+“通过替代驱动程序在Windows 2003托管平台上受支持:”+strSubs
如果结束
返回strResult
端函数
末级
default.aspx
<%@ Page Language="VB" AutoEventWireup="false" EnableEventValidation="false" Inherits="Printer_Compatibility_Matrix_VB._Default" Codebehind="Default.aspx.vb" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Printer Compatibility Matrix</title>
<script src="jquery-1.4.4.min.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
function CallService() {
$.ajax({
type: "POST",
url: "printers.asmx/GetDriver",
data: $("#ddlModel option:selected").text(),
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="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods = "true">
<Services>
<asp:ServiceReference Path="printers.asmx" />
</Services>
</asp:ScriptManager>
<div>
Manufacturer: <asp:DropDownList ID="ddlMake" runat="server" Width="170" /><br />
Printer: <asp:DropDownList ID="ddlModel" runat="server" Width="170" /><br />
<asp:Button ID="btnDriver" Text="Submit" OnClientClick="CallService(); return false;" runat="server" />
<asp:Label ID="lblResult" Text=" " Width="100%" runat="server" />
<cc1:CascadingDropDown
id="CascadingDropDown1"
runat="server"
category="Make"
prompttext="Select a Manufacturer..."
ServiceMethod="GetMake"
ServicePath="printers.asmx"
TargetControlId="ddlMake"
/>
<cc1:CascadingDropDown
id="CascadingDropDown2"
runat="server"
category="Model"
prompttext="Select a Printer..."
ServiceMethod="GetModel"
ServicePath="printers.asmx"
TargetControlId="ddlModel"
ParentControlId="ddlMake"
/>
</div>
</form>
</body>
</html>
<script src="jquery-1.4.4.min.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
function CallService() {
$.ajax({
type: "POST",
url: "printers.asmx/GetDriver",
data: "{ 'model_id': " + $("#ddlModel :selected").val() + "}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnSuccess,
error: OnError
});
}
function OnSuccess(data, status) {
$("#lblResult").html(data);
}
function OnError(request, status, error) {
$("#lblResult").html("<font color=#FF0000>Please make a valid selection.<font>");
}
</script>
打印机兼容性矩阵
函数CallService(){
$.ajax({
类型:“POST”,
url:“printers.asmx/GetDriver”,
数据:$(“#ddlModel选项:选中”).text(),
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:一旦成功,
错误:OnError
});
}
成功时的功能(数据、状态){
$(“#lblResult”).html(data.d);
}
函数OnError(请求、状态、错误){
$(“#lblResult”).html(request.statusText);
}
制造商:
打印机:
非常感谢您抽出时间
吉姆
编辑
似乎除了Frédéric发现的错误之外,我还忘记了引用jQuery,我已经修改了上面的代码以匹配我的curr