从WCF服务接收Jsonp回调和数据

时间:2015-10-22 07:51:43

标签: jquery ajax wcf

感谢您迄今为止所有出色的帮助 - 我的小项目取得了很好的进展。然而,我遇到了另一个无法通过的障碍。

我的服务界面有一个如下所示的功能:

    <OperationContract()> _
       <WebGet(BodyStyle:=WebMessageBodyStyle.Bare, ResponseFormat:=WebMessageFormat.Json,
               RequestFormat:=WebMessageFormat.Json, UriTemplate:="GetCustomers?strCustomers={strCustomers}&callback={CustomerCallback}")> _
    Function GetCustomers(ByVal strCustomers As String, ByVal CustomerCallback As String) As Stream

此函数返回json数据,如下所示:

  For i = 0 To CustomerTable.Rows.Count - 1
                                CustomerRow = CustomerTable.Rows(i)
                                Dim CC As New Customers
                                CC.Code = CustomerRow.Item("Code")
                                CC.Name = CustomerRow.Item("Name")
                                CC.InternalID = CustomerRow.Item("InternalID")

                                Cust.Add(CC)


                            Next i
                            ' Serialize the results as JSON
                            Dim serializer As DataContractJsonSerializer = New DataContractJsonSerializer(Cust.GetType())
                            Dim Stream As MemoryStream = New MemoryStream

                            serializer.WriteObject(Stream, Cust)

                            ' Return the results serialized as JSON
                            Dim strJson As String = Encoding.Default.GetString(Stream.ToArray())

                            Dim jsCode As String = CustomerCallback & "(" & strJson & ")" '"({""Status"":""OK""});"

                            WebOperationContext.Current.OutgoingResponse.ContentType = "application/javascript"
                            Return New MemoryStream(Encoding.UTF8.GetBytes(jsCode))

好的,所以现在将回调函数发送到我应该使用这个数据的jquery / ajax函数。这是我的ajax电话:

var customStore = new DevExpress.data.CustomStore({         load:function(){

         return  $.ajax({
                type: 'GET',
                url: url,
                data: {},
                dataType: "jsonp",
                success: function (result) {
                    console.log(result.strCustomers);

                },
            error: function (xhr, status, error) {
                console.log(JSON.stringify(xhr));
                console.log(JSON.stringify(status));
                console.log(JSON.stringify(error));
            }

         });

    },
    totalCount: function(loadOptions) {
    return 0;
}
});

此代码执行时没有任何错误,因此从我这边做这个的方式应该是正确的。

问题是我无法将这些数据显示在数据网格中;所以我认为我实际上并没有得到正确的数据,尽管没有错误。

我想知道:

我是否通过正确的方式从WCF服务发送了数据? 如何在jquery页面中进一步使用实际数据?

整个问题是,我需要从我的WCF服务中获取所有客户,通过跨域调用(我已经管理过),然后在devextreme datagrid中显示所有这些客户:

var gridDataSourceConfiguration = {
    store: customStore
};

var dataGridOptions = {
    dataSource: gridDataSourceConfiguration,
    filterRow: {
        visible: ko.observable(true),
        applyFilter: ko.observable("auto")
    },
    searchPanel: {
        visible: true,
        width: 240,
        placeholder: 'Search...'
    },
    headerFilter: {
        visible: true
    },
    columns: [{
        dataField: "InternalID",
        width: 30,
        caption: "ID"
    }, {
        dataField: 'Name',
        alignment: 'right'
    }, {
        dataField: "Code",
        alignment: 'right'
    }
    ]
};

那么,我怎样才能将数据导入数据网格?

1 个答案:

答案 0 :(得分:0)

很抱歉看了你宝贵的时间,但我已经解决了。我在上面没有发布的代码上遇到了问题。