【问题标题】:From Database to datatable to generic collection to JSon via JQuery通过 JQuery 从数据库到数据表到通用集合到 JSON
【发布时间】:2012-06-29 20:36:54
【问题描述】:

好人,我进退两难,时间肯定不在我这边。

我的目标 我想通过数据集/数据表从数据库中获取记录,然后到通用集合,最后在客户端使用 JQuery 到 JSon 对象,以改善用户体验。

目前有效 在将数据交给客户端/浏览器之前,我的代码一直在 Web 服务中工作。

我不确定什么 由于我对 JSON 和 JQuery 的经验很少或几乎没有经验,因此来自 Web 服务的数据不会显示在 Web 浏览器中。不知道问题出在哪里。

代码 在这里我附上我的其余代码:

  1. hotelrates.vb 文件,hotelrates.asmx 文件背后的代码
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Web.Script.Services
Imports System.Collections.Generic
Imports System.Linq
Imports System.Data
Imports MySql.Data.MySqlClient
Imports System.Reflection

<WebService([Namespace]:="http://tourslogin.net/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ScriptService()> _
Public Class Hotelrates
 Inherits WebService
 <WebMethod()> _
 Public Function GetRates() As Generic.List(Of Rate)
    Dim m_globalfunctions As New clsGlobalFunctions
    Dim SQL As String = "SELECT 

tblhotelrates.ID,供应商,From_date,To_Date,Room_type,Room_basis FROM tblhotelrates,tblHotels WHERE tblhotelrates.SupplierID=tblHotels.ID "

     Dim clsDB As New clsDatabase("jksafarisdbConnectionString")
     Dim dsCostingDetails As DataSet
     Try
        dsCostingDetails = clsDB.QueryDataSet(SQL, "jksafarisdbConnectionString")

        Dim s As Rate
        Dim c As New Generic.List(Of Rate)
        For Each dr As DataRow In dsCostingDetails.Tables(0).Rows
            s = New Rate
            With s
                .myID = m_globalfunctions.CheckDBNull(dr("ID"))
                .Supplier = m_globalfunctions.CheckDBNull(dr("Supplier"))
            End With
            c.Add(s)
        Next

        Return c
    Catch ex As Exception
        MsgBox(ex.Message)
    Finally
        clsDB.Close()
    End Try

End Function End Class <Serializable()> _ Public Class Rate
Private _myID As String
Private _supplier As String

Public Property myID() As String
    Get
        Return _myID
    End Get
    Set(ByVal value As String)
        _myID = value
    End Set
End Property

Public Property Supplier() As String
    Get
        Return _supplier
    End Get
    Set(ByVal value As String)
        _supplier = value
    End Set
End Property End Class
  1. 客户端代码JQuery/Json

<div id="output"></div>
<script type="text/javascript">
$(function () {

 $('#Button1').click(getRates);

 });



function getRates() {

$.ajax({

    type: "POST",

    url: "Hotelrates.asmx/GetRates",

    data: "{}",

    contentType: "application/json; charset=utf-8",

    dataType: "json",

    success: function (response) {

        var rates = response.d;

        $('#output').empty();

        $.each(rates, function () {

            $('#output').append('<p><strong>' + Rate.myID + ' ' +

                        Rate.myID + '</strong><br /> Year: ' +

                        Rate.mySupplier + '<br />');

        });

    },

    failure: function (msg) {

        $('#output').text(msg);

    }
});
     }

  </script>
  </asp:Content>

【问题讨论】:

  • 你调试过js并检查过它的落点吗?

标签: jquery asp.net json service web


【解决方案1】:

你的 js 中的 Rate 变量似乎没有声明。

尝试用这个来改变你的成功回调函数:

success: function (response) {
    var rates = response.d;
    $('#output').empty();

    for (var r in rates) {
        $('#output').append('<p><strong>' + rates[r].myID + ' ' +
                    rates[r].myID + '</strong><br /> Year: ' +
                    rates[r].mySupplier + '<br />');

    }
}

【讨论】:

  • 这是一个好的开始,但我认为 OP 的代码中还有其他问题。例如,他为什么使用response.d?似乎没有任何迹象表明正在设置 d 变量。 @Lindelani,您可以使用的一个技巧是在 Chrome 或 Firefox 中使用脚本调试器,并在成功处理程序中放置一个断点。在那里,您可以检查从服务器返回的对象,并轻松了解如何对其进行迭代。
  • 使用 response.d 是因为它是标准 .asmx Web 服务使用的默认包装器,我认为那里没有问题。
  • 谢谢你们的建议,我很感激。 tanathos 提供的功能运行良好。谢谢。
  • 如果能解决您的问题,请将答案标记为解决方案
猜你喜欢
  • 1970-01-01
  • 2019-06-30
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
相关资源
最近更新 更多