Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.10.2012, 15:35
Новичок на форуме
Отправить личное сообщение для GreyDog Посмотреть профиль Найти все сообщения от GreyDog
 
Регистрация: 02.10.2012
Сообщений: 6

ajax запрос к Web Service
Нужно заполнить данными из ajax запроса jqGrid.
Но проблема с парсингом.

$(document).ready(function () { 
$.ajax({
 type: "POST",
 url: "WebServiceMonitoringLog.asmx/Stations",
 data: "{}",
 contentType: 'text/json;charset=UTF-8',
 dataType: "json",
 success: succ,
 error: err
 });
  
function err(data, request, status) {  alert('------\n' + data.responseText + '\n------'+'\n'+request+'\n'+status);}

 function succ(data, status) {
 jQuery("#addtree").jqGrid({
 url: 'WebServiceMonitoringLog.asmx/Stations',
 datatype: 'json',
 mtype: "POST",
 colNames: ['Id', 'Name', 'Coord'],
 colModel: [
  {name: 'Id',index: 'Id',width: 20,editable: false,},
{name: 'Name',index: 'Name',width: 150,align: "left",editable: false,size: 100},
{name: 'Coord',index: 'Coord',width: 100,editable: false,}],
rowNum: 10,
 rowList: [2, 5, 10, 15],
 pager: '#pjmap',
 sortname: 'Id',
 sortorder: "desc",
 viewrecords: true,
  jsonReader: {repeatitems: false},
 width: 600,
 caption: 'jqGrid demo',
  height: '100%',});
 }
})

При выполнении вызывается функция err


Как видно-ошибка парсинга.
Код веб сервиса,откуда приходит ответ на ajax запрос

Код:
using System;
....................
using System.Collections.Generic;
namespace Example
{
       class Station
       {
             public int Id{get;set;}
             public string Name{get;set;}
             public string Coord{get;set;}

             public Station()
             {
                         Id = 1;
                         Name = "st1";
                         Coord = "0;0";
             }

[WebService(Namespace = "http://tempuri.org/")]
 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
 [System.ComponentModel.ToolboxItem(false)]
 [System.Web.Script.Services.ScriptService]
 public class WebServiceMonitoringLog : System.Web.Services.WebService
 {
             [WebMethod]
             [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
             public string Stations()
             {
                  List<vStation> sl = new List<vStation>(DataManager.vStation.GetAllStation().Take(10));
                  List<Station> stl = new List<Station>();

                   for (int i = 0; i < sl.Count; i++)
                   {
                         stl.Add(new Station());
                         stl[i].Id = sl[i].StationId;
                         stl[i].Name = sl[i].NameStation;
                         stl[i].Coord = sl[i].Position.ToString();
                   }
                  var vsl = stl; 
                  var gridData = new
                                                 {
                                                       total = 1,
                                                       page = 1,
                                                       records = vsl.Count,
                                                       rows = vsl,
                                                 };

                   var jsonSerializer = new JavaScriptSerializer();
                   return jsonSerializer.Serialize(gridData);
             }
         }
      }
 }
Можно ли как нибудь убрать из ответа это:
Код:
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">
                   json-строка
</string>
Чтобы осталасть только json-строка. Или я не правильно понимаю мысла парсинга ответа?
Ответить с цитированием
  #2 (permalink)  
Старый 02.10.2012, 16:45
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 28.03.2012
Сообщений: 376

ну, собсна, можно получить сначала все данные целиком в виде текста, а затем обрезать лишнее - весь этот xml-текст, оставив только json. вуаля.
Ответить с цитированием
  #3 (permalink)  
Старый 02.10.2012, 17:53
Новичок на форуме
Отправить личное сообщение для GreyDog Посмотреть профиль Найти все сообщения от GreyDog
 
Регистрация: 02.10.2012
Сообщений: 6

хм...

а ведь точно !

$(document).ready(function () {
            var result;
            $.ajax({
                type: "POST",
                url: "WebServiceMonitoringLog.asmx/Stations",
                data: "{}",
                contentType: 'text/xml;charset=UTF-8',//тип содержимого ответа в виде xml-это ж очевидно
                dataType: "xml", //ну вы поняли!
                success: succ,
                error: err
            });
 function err(data, request, status) 
            {
                alert('------\n' + data.responseText + '\n------'+'\n'+request+'\n'+status);
            }
                
               


        
            function succ(data, status)
            {
                result = $(data).find("string");//уберем стринговые теги,оставив непосредственно строку json
               // alert( $(result).text() )
               
                   jQuery("#addtree").jqGrid //грид не выводится...ну это пока.читаю мануал
                    ({

                        datatype: 'json',
                        data: "{}",
                        userdata: "result",
                     
                        jsonReader: {
                            page: "page",
                            total: "total",
                            records: "records",
                            root: "rows",
                            userdata: "result"
                        },

                        colNames: ['Id', 'Name', 'Coord'],
                        colModel: [ {name: 'Id',index: 'Id',width: 20,editable: false,},
                                    {name: 'Name',index: 'Name',width: 150,align: "left",editable: false,size: 100},
                                    {name: 'Coord',index: 'Coord',width: 100,editable: false,}
                        ],
                        rowNum: 10,
                        rowList: [2, 5, 10, 15],
                        pager: '#pjmap',
                        sortname: 'Id',
                        sortorder: "desc",
                        viewrecords: true,
                      
                        width: 600,
                        caption: 'jqGrid demo',
                        height: '100%'
                    });
                    
            }
        });
Ответить с цитированием
  #4 (permalink)  
Старый 08.10.2012, 17:02
Новичок на форуме
Отправить личное сообщение для GreyDog Посмотреть профиль Найти все сообщения от GreyDog
 
Регистрация: 02.10.2012
Сообщений: 6

Проблема была в возврате json строки вебсервисом

[WebMethod]
             [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
             public void Stations()
             {
                  List<vStation> sl = new List<vStation>(DataManager.vStation.GetAllStation().Take(10));
                  List<Station> stl = new List<Station>();

                   for (int i = 0; i < sl.Count; i++)
                   {
                         stl.Add(new Station());
                         stl[i].Id = sl[i].StationId;
                         stl[i].Name = sl[i].NameStation;
                         stl[i].Coord = sl[i].Position.ToString();
                   }
                  var vsl = stl; 
                  var gridData = new
                                                 {
                                                       total = 1,
                                                       page = 1,
                                                       records = vsl.Count,
                                                       rows = vsl,
                                                 };

                  var jsonSerializer = new JavaScriptSerializer();
            string JsonString = jsonSerializer.Serialize(gridData);
            Context.Response.Write(JsonString);
            Context.Response.End();
             }


Строка формируется правильная,грид ее понимает и данные отображаются
$(document).ready(function(){
                $("#list").jqGrid({
                   url: 'WebServiceMonitoringLog.asmx/Stations',
                    datatype: 'json',
                    mtype: 'POST',
                    jsonReader: {
                        repeatitems: false,
                        id: "Id",
                        root: "rows",
                        page: "page",
                        total: "total",
                        records: "records",
                        repeatitems: false,

                    },
                    colNames: ['Id', 'Name', 'Lat', 'Long'],
                    colModel: [{ name: 'Id', index: 'Id' },
                               { name: 'Name', index: 'Name' },
                               { name: 'Lat', index: 'Lat' },
                               { name: 'Long', index: 'Long' }
                    ],
                    pager: jQuery('#pager'),

                    width: 500,
                    height: "100%",
                    scrollOffset: 20,
                    rowNum: 10,
                    rowList: [10, 20, 30],
                    sortname: 'Id',
                    sortorder: "asc",
                    viewrecords: true,
                    caption: 'Описание',
                    hoverrows: false
                }).navGrid('navGrid', '#pager', { edit: false, add: false, del: false });
            })
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу сделать ajax запрос jazzz13 AJAX и COMET 4 17.05.2012 16:31
Составить Ajax запрос и json LASSO jQuery 1 16.02.2012 03:36
Ajax запрос. Возврат массива. Rinas jQuery 5 09.04.2011 18:58
Синхронный запрос данных по AJAX Shasoft AJAX и COMET 2 03.03.2009 14:07
ajax запрос с подгружемным js HelpeR AJAX и COMET 1 27.10.2008 12:44