Я использую приложение JQGrid в .net. Я использовал образцы онлайн-кода, он не выдавал никаких ошибок, но он не работает или не уверен, что я делаю неправильно. Может ли кто-то, кто работал над JQgrid, пройти через мой код и показать мне немного о том, что я делаю неправильно. Я могу войти в код на стороне сервера, и он не бросает никаких ошибок. Действительно не совсем уверен, что я делаю неправильно.JQGrid с webservice не загружает данные
Вот страница ASPX:
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
<link rel="stylesheet" type="text/css" media="screen" href="jquery-ui-1.8.17.custom.css" />
<link rel="stylesheet" type="text/css" media="screen" href="ui.jqgrid.css" />
<script src="jquery.js" type="text/javascript"></script>
<script src="grid.locale-en.js" type="text/javascript"></script>
<script src="jquery.dataTables.min.js" type="text/javascript"></script>
<script src="jquery.jqGrid.min.js" type="text/javascript"></script>
Вызов gquery для загрузки сетки
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery("#list").jqGrid({
type: "GET",
url: "MyService.asmx/GetRecipie",
contentType: "application/json; charset=utf-8",
dataType: "json",
colNames: ['Inv No', 'Date', 'Amount'],
colModel: [
{ name: 'job_id', index: 'job_id', width: 55 },
{ name: 'job_num', index: 'job_num', width: 90 },
{ name: 'order_num', index: 'order_num', width: 80, align: 'right'}],
pager: jQuery('#pager'),
rowNum: 10,
rowList: [10, 20, 30],
sortname: 'id',
sortorder: "desc",
viewrecords: true,
imgpath: 'themes/basic/images',
caption: 'My first grid',
loadError: Error
});
});
function Error(xhr, st, err) {
jQuery("#rsperror").html("Type: " + st + "; Response: " + xhr.status + " " + xhr.statusText);
}
</script>
</head>
<body>
<table id="list" class="scroll">
</table>
<div id="pager" class="scroll" style="text-align: center;">
</div>
</body>
</html>
Мой веб-сервиса
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = false)]
public string GetRecipie()
{
string strQuery = "SELECT * FROM job where job_id like '%2345%'";
DataTable dtRecipie = null;
Recipie objRecipie = default(Recipie);
SqlConnection con = new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;DATABASE=TESTDB;Data Source=SQL;");
using (con)
{
con.Open();
using (SqlDataAdapter sqlAdapter = new SqlDataAdapter(strQuery, con))
{
dtRecipie = new DataTable();
sqlAdapter.Fill(dtRecipie);
}
}
List<Recipie> drlist = new List<Recipie>();
foreach (DataRow dr in dtRecipie.Rows)
{
objRecipie = new Recipie();
objRecipie.jobId = Convert.ToInt32(dr["job_id"].ToString());
objRecipie.JobNumber = dr["job_num"].ToString();
objRecipie.OrderNumber = dr["order_num"].ToString();
drlist.Add(objRecipie);
}
JavaScriptSerializer jSearializer = new JavaScriptSerializer();
return jSearializer.Serialize(drlist);
}
}
public class Recipie
{
public int jobId;
public string JobNumber;
public string OrderNumber;
}
}
Это потому, что у вас есть UseHttpGet = false, но ваш вызов Ajax выполняется с помощью GET вместо POST? – Tuan
@Tuan: В общем, вы правы, но HTTP GET будет использоваться не из-за 'type:" GET "', а потому, что правильное имя параметра должно быть 'mtype:" POST "'. Параметр 'dataType:" json "' также неверен (неверный случай). Поэтому default 'datatype:" xml "' будет использоваться jqGrid. Опубликованный код содержит так много ошибок, что список будет слишком длинным. Например, вместо возвращаемого объекта 'drlist' (' List ') из веб-метода вызывается один вызов' JavaScriptSerializer.Serialize' вручную. Полученная строка будет JSON закодирована еще раз. Я могу продолжить ... –
Oleg
@ user1098028: Я рекомендую вам прочитать [ответ] (http://stackoverflow.com/a/3161542/315935). [Здесь] (http://stackoverflow.com/a/4031603/315935) и [здесь] вы можете найти некоторые ссылки на демонстрационные проекты, которые вы можете скачать. Я надеюсь, что вы можете изменить демо в свою среду. – Oleg