2013-11-03 90 views
0

我有以下的web服务,其中,通过asp.net进行测试时,“视图浏览器”不会检索它显示了在XML浏览器Web服务没有返回JSON

这里的数据是Web服务

Imports System.Web 
Imports System.Web.Services 
Imports System.Web.Script.Services 
Imports System 
Imports System.IO 
Imports Newtonsoft.Json 
Imports System.Text 

<ScriptService()> _ 
<WebService(Namespace:="BATLDataRetrieval")> _ 
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ 
<Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ 
Public Class WebService 
Inherits Services.WebService 

    <WebMethod()> _ 
    <ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _ 
Public Function GetOhlcvData(ByVal symbol As String) As List(Of StockPricesDTO) 
    Dim tempList As New List(Of StockPricesDTO) 
    Dim stockData As New ArrayList() 

    Using ctx As New BATLEntities() 
     Dim symid As Long = (From sym In ctx.last60dayssymbols Where symbol = sym.symbol Select sym.id).FirstOrDefault() 
     Dim data = (From ohlcv In ctx.last60daysdata 
        Where ohlcv.lastSixty_symbolId = symid 
        Select ohlcv).ToList() 

     For Each dataDay In data 
      Dim tempSp As New StockPricesDTO 
      tempSp.QuoteDate = DateTimeToUnixTimestamp(dataDay.date) 
      tempSp.Open = dataDay.open 
      tempSp.High = dataDay.high 
      tempSp.Low = dataDay.low 
      tempSp.LastSale = dataDay.last 
      tempSp.Volume = dataDay.volume 
      tempList.Add(tempSp) 
     Next 
     Return tempList 
    End Using 
End Function 

我使用这个服务检索stockdata从我们的数据库使用如下 ,我需要它以JSON用此格式返回数据

[[1162512000000,79.36,79.53,77.79,78.29,15426335], 
[1162771200000,78.95,80.06,78.43,79.71,15525782], 
[1162857600000,80.45,81.00,80.13,80.51,18788494]....] 

的每Fiddler传回实际JSON是

{"d": [{"__type":"StockPricesDTO","QuoteDate":1383282000000,"Open":1031.79,"High":1036.00,"Low":1025.10,"LastSale":1027.04,"Volume":1283300},{"__type":"StockPricesDTO","QuoteDate":1383195600000,"Open":1028.93,"High":1041.52,"Low":1023.97,"LastSale":1030.58,"Volume":1616400},{"__type":"StockPricesDTO","QuoteDate":1383109200000,"Open":1037.43,"High":1037.51,"Low":1026.00,"LastSale":1030.42,"Volume":1324100}, 

JavaScript代码是

$(function() { 
     var symbol = "GOOG"; //will replace with <a> tag click value 
     $.ajax({ 
      type: "POST", 
      url: "WebService.asmx/GetOhlcvData", 
      contentType: "application/json; charset=utf-8", 
      data: '{symbol: "' + symbol + '"}', 
      cache: false, 
      dataType: "json", 
      success: function (data) { 
       alert(data.d); 
       showChart(data.d); 
      }, 
      error: function (jqXHR, textStatus, errorThrown) { 
       alert(textStatus + ' - ' + errorThrown); 
      } 
     }); 
     function showChart(chartData) { 
      $('#chartContainer').highcharts('StockChart', { 
       rangeSelector: { 
        selected: 1 
       }, 
       title: { 
        text: symbol + ' Stock Price' 
       }, 
       series: [{ 
        name: symbol, 
        data: chartData, 
        tooltip: { 
         valueDecimals: 2 
        } 
       }] 
      }); 
     } 
    }); 

警报(data.d)产生的,而不是在JSON实际数据[对象的对象。这是我第一次尝试创建一个返回json的服务,所以请原谅我的无知,如果这是一项简单的任务。

+0

如果使用chrome工具或萤火虫进行调试,'data'内的数据看起来像什么? – christiandev

+0

在小提琴手它显示每个数组数组中的第一项作为_type = StockPricesDTO ....是什么导致这个问题?看到上面的编辑 – dinotom

回答

0

我会尝试更换

data: '{symbol: "' + symbol + '"}', 

data: {symbol: symbol}, 

你会看到更多的(使用警报()的时候比),如果你

  • 输出到控制台console.log(data)
  • 不使用MSIE,但Chrome,Firefox,...和他们的网站-Developer utitilies
  • 看在Chrome Webinspector/Firefox的Firebug的网络选项卡,并分析请求和响应

在控制台(或调试器),你可以检查什么是由服务器返回,并告诉我们,如果你不会跟它一起来的。

+0

0:对象 高:1036 LastSale:1027.04 低:1025.1 开:1031.79 QuoteDate:13832.82亿 量:1283300 __type: “StockPricesDTO” 是Chrome控制台显示作为回报 – dinotom

+0

如果highchart真正需要以[[n,n,n],[n,n,n],...]形式存在的数据,您必须转换数据服务器端或客户端。我会做客户端。如果你可以依靠ES5,这只是一些'Array.map'调用的问题。你需要帮助吗?我的答案如何 - 是否有帮助? – hgoebl

+0

接受的答案,因为它引导我走下去,最终与我一起使用arraylist并返回数据 – dinotom