Пример Basic Simple Asp.net + jQuery + JSON
Я пытаюсь узнать, как сделать простой вызов сервера из Javascript/jQuery. Я пытался учиться и не мог найти учебник с этими простыми шагами.
Я хочу отправить сообщение серверу с двумя параметрами (DateTime и String) и вернуть DateTime. Я хочу сделать это через JSON.
- Как выглядит код на сервере (только для структуры)?
- Есть ли что-то особенное на стороне сервера? А как насчет безопасности?
- Как реализовать вызов в jQuery?
- И как бы я обработал результат?
Мне больше всего интересна структура кода.
Обновление
Я нашел ответ ниже, чтобы начать меня. Тем не менее, я недавно наткнулся на Полный ASP.NET, LINQ, jQuery, JSON, Ajax Tutorial. Это просто фантастический и очень дидактический шаг за шагом, что я хочу поделиться с кем-либо, кто сталкивается с этим вопросом в будущем.
Ответы
Ответ 1
Существует несколько способов сделать это; это будет служить единственным примером.
Вы можете написать что-то вроде этого для вашего кода jQuery:
urlToHandler = 'handler.ashx';
jsonData = '{ "dateStamp":"2010/01/01", "stringParam": "hello" }';
$.ajax({
url: urlToHandler,
data: jsonData,
dataType: 'json',
type: 'POST',
contentType: 'application/json',
success: function(data) {
setAutocompleteData(data.responseDateTime);
},
error: function(data, status, jqXHR) {
alert('There was an error.');
}
}); // end $.ajax
Затем вам нужно создать "общий обработчик" в вашем проекте ASP.net. В своем общем обработчике используйте Request.Form
для чтения значений, переданных как json. Код для вашего общего обработчика может выглядеть примерно так:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class handler : IHttpHandler , System.Web.SessionState.IReadOnlySessionState
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "application/json";
DateTime dateStamp = DateTime.Parse((string)Request.Form["dateStamp"]);
string stringParam = (string)Request.Form["stringParam"];
// Your logic here
string json = "{ \"responseDateTime\": \"hello hello there!\" }";
context.Response.Write(json);
}
Посмотрите, как это работает. Это поможет вам начать работу.
Обновление: Я разместил этот код на CodeReview StackExchange: https://codereview.stackexchange.com/questions/3208/basic-simple-asp-net-jquery-json-example
Ответ 2
Если вы используете jQuery, вы можете сделать это с помощью GET или POST.
$.get ('<url to the service>',
{ dateParam: date, stringParam: 'teststring' },
function(data) {
// your JSON is in data
}
);
$.post ('<url to the service>',
{ dateParam: date, stringParam: 'teststring' },
function(data) {
// your JSON is in data
}
);
Обратите внимание, что имя параметров в (например, dateParam, stringParam) должно быть таким же, как имя параметров, которые ожидает ваш метод службы. Также, чтобы ваша служба должна была отформатировать результат как JSON, параметр данных в обратном вызове будет содержать все, что отправляет ваш сервис (например, текст, xml, json и т.д.).
См. документацию jQuery для $.ajax, $.get, $.post: http://api.jquery.com/jQuery.ajax/, http://api.jquery.com/jQuery.get/, http://api.jquery.com/jQuery.post/
Ответ 3
Здесь пример кода с использованием jquery ajax-вызова и на веб-сервере serveride возвращает данные формата jSon.
JQuery:
$(‘#myButton’).on(‘click’,function(){
var aData= [];
aData[0] = "2010";
aData[0]=""
var jsonData = JSON.stringify({ aData:aData});
$.ajax({
type: "POST",
url: "Ajax_function/myfunction.asmx/getListOfCars", //getListOfCars is my webmethod
data: jsonData,
contentType: "application/json; charset=utf-8",
dataType: "json", // dataType is json format
success: OnSuccess,
error: OnErrorCall
});
function OnSuccess(response.d)) {
console.log(response.d)
}
function OnErrorCall(response)) { console.log(error); }
});
Codebehind: Здесь веб-метод, который возвращает данные формата json в списке автомобилей
[webmethod]
public List<Cars> getListOfCars(list<string> aData)
{
SqlDataReader dr;
List<Cars> carList = new List<Cars>();
using (SqlConnection con = new SqlConnection(cn.ConnectionString))
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandText = "spGetCars";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = con;
cmd.Parameters.AddWithValue("@makeYear", aData[0]);
con.Open();
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
if (dr.HasRows)
{
while (dr.Read())
{
string carname=dr["carName"].toString();
string carrating=dr["carRating"].toString();
string makingyear=dr["carYear"].toString();
carList .Add(new Cars{carName=carname,carRating=carrating,carYear=makingyear});
}
}
}
}
return carList
}
//Создал класс
Public class Cars {
public string carName;
public string carRating;
public string carYear;
}
Статья в блоге: