
02.10.2012, 15:35
|
Новичок на форуме
|
|
Регистрация: 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-строка. Или я не правильно понимаю мысла парсинга ответа?
|
|

02.10.2012, 16:45
|
 |
Профессор
|
|
Регистрация: 28.03.2012
Сообщений: 376
|
|
ну, собсна, можно получить сначала все данные целиком в виде текста, а затем обрезать лишнее - весь этот xml-текст, оставив только json. вуаля.
|
|

02.10.2012, 17:53
|
Новичок на форуме
|
|
Регистрация: 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%'
});
}
});
|
|

08.10.2012, 17:02
|
Новичок на форуме
|
|
Регистрация: 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 });
})
|
|
|
|