The objective is to call a method which does it's thing then returns a JSON object.
I'm new to JSON.
I have a default.aspx and in it the following code. Now I want an ordinary method in Default.aspx.cs to run on the click event here.
$(".day").click(function (event) {
var day = $(event.currentTarget).attr('id');
if (day != "") {
$.ajax(
{
type: "POST",
async: true,
url: 'Default.aspx?day=' + day,
data: day,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
console.log("SUCCESS:" + msg);
// $(".stripp img").attr('src', "data:image/jpg;" + msg);
// $(".stripp").show();
},
error: function (msg) {
console.log("error:" + msg);
}
});
}
});
Default.aspx.cs looks similar to this:
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["day"] != null)
GetFile(Request.QueryString["day"]);
}
public string GetFile(string day)
{
string json = "";
byte[] bytes = getByteArray();
json = JsonConvert.SerializeObject(bytes);
return json;
}
Where am I going wrong here? Should I be using this in some way or is it only applicable in Web Services?
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
I would suggest an
HttpHandler
. No page lifecycle (so it is blazing fast) and much cleaner code-separation, as well as reusability.Add a new item to your project of type "Generic Handler". This will create a new .ashx file. The main method of any class that implements
IHttpHandler
isProcessRequest
. So to use the code from your original question:Change the url in your AJAX call and that should do it. The JavaScript would look like this , where GetFileHandler.ashx is the name of the IHttpHandler you just created:
Another small point to consider, if you need access to the Session object from within the Handler code itself, make sure to inherit from the
IRequiresSessionState
interface:Been a while since I worked with webforms, but if remember correctly it should work if you put the webmethod attribute over GetFile method and make that method static.
Furthermore, how you post data in ajax method is a bit off. Remove querystring day from url and data should be in json format, something like {"day":day}
Yes your method has to be static with the WebMethod attribute
Basic example:
CS
Javascript