Jquery - How To Implement JSONP In Web Application
Dec 20, 2010
How can I implement Jquery JSONP in my ASP.NET project. My application flow is described below:
1) I am opening a HTTP page, where I have got JQuery login dialog box, from which username and password is posted to my Login.aspx page, which has got one method "GetLoginDetails" which takes posted username and password and sends to a WEBSERVICE which checks the users name and password and return back with "success=true"
2) so in my response I get "success=true", I read that value from jquery and works according to responded text on my client side it display message "Logged in Successfully".
I am developing web application and in application i need to make call of jQuery using .ajax(); method with datatype is set jsonp. Now all works well with limited data but problem start to occur when data size is increasing......
The service cannot be activated because it does not support ASP.NET compatibility. ASP.NET compatibility is enabled for this application. Turn off ASP.NET compatibility mode in the web.config or add the AspNetCompatibilityRequirements attribute to the service type with RequirementsMode setting as 'Allowed' or 'Required'.
when i try to access wcf service i get this error: the reason is HttpContext.Current is null, what should i do in this case?
Object reference not set to an instance of an object.
System.Web.Script.Serialization.JavaScriptSerializer s = new System.Web.Script.Serialization.JavaScriptSerializer(); Person p = new Person() { FirstName = "First name", LastName= "last name" }; string json = s.Serialize(p); System.Web.HttpContext.Current.Response.Write("jsoncallback" + json);} //error
I am trying out jsonp with jQuery. I found many examples on the web and I believe my code is correct, but its still not working for me.
My web service:
using System.Web; using System.Web.Script.Services; using System.Web.Services; using System.Web.Script.Serialization;..........
Firebug shows this is a success, but I am getting null from the alert. I have my webservice in iis7 locally and I am testing through my debug in my client project.
I have a simple script making a request to the server:
var DTO = { 'path': path }; var url = 'default.aspx/Get'; var test; $('#getInstance').click(function () { $.ajax({ url: url, type: 'POST', dataType: 'json', data: JSON.stringify(DTO), contentType: 'application/json; charset=utf-8', success: function (msg) { test = msg; }, error: function (jqXHR, textStatus, errorThrown) { alert(textStatus); alert(errorThrown); } }); });
This works fine as in it connects to the server and gets the data back, with one simple problem. It is treating this request as a cross domain request, therefore using jsonp. The server code is here:
[WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public static MyObject Get(string path) { MyObject foo = new MyObject(); return foo; }
Normally this would not be a problem, except that I am accessing a WebMethod, and it doesnt have the capability to return a jsonp response (meaning it has no way to attach the callback function to the response. Now, if this was a manual response, I could hack it up and attach the parameter, but I am taking advantage of the built-in serialization, so no way to mess around with the response. [URL]
Let me just stress the fact that this code works. The only problem is jQuery treating this request as cross domain. But Why? UPDATE: Well, after many more hours and more testing I have narrowed this issue down to it being a bug in jquery 1.5.1. I did some testing with older versions (all 1.4 versions) and I had no problem, the request was made using JSON, and the response was received successfully. What could be the change they made that would consider this request a CORS?
in my webservice (asp.net) I'm returning the response with a content type of application/javascript. The response the server is actually sending back is: jsonp1276109314602({"message":"I'm getting tired of this not working"}) The jsonp1276109314602 method name is being randomly generated by jquery, and I'm grabbing it with Request.QueryString["callback"] However my success function is never called and the firebug console gives me an error saying jsonp1276109314602 is not defined. What am I doing wrong?
NOTE: I'm making this call from a greasemonkey script on a craigslist page. It's a cross-domain request, but I can see the request is actually making it to the server and returning a good response, but for whatever reason the registered callback that jquery creates appears to not exist when the response comes back. It works fine if I run the script in the firebug console from the craigslist page, but not when it's run from the greasemonkey script.
EDIT: At first I thought it wasn't working cross domain at all, now I realize it only works in IE. I'm using jQuery to call a web service (ASP.NET .axmx), and trying to us jsonp so that I can call it across different sites. Right now it is working ONLY in IE, but not in Firefox, Chrome, Safari. Also, in IE, a dialog pops up warning "This page is accessing information that is not under its control..."
I'm working on an intranet system (.NET 3.5); the main pages are served up from a standard ASP.NET server. I would like to use Ajax on those pages to contact a WCF service running on a different machine, to retrieve data, do CRUD operations - the usual Ajax stuff.
The problem I'm trying to resolve is: can I take cookies which were set by the ASP.NET server, and include them on requests to the WCF service? If so, how?
My understanding is that JSONP bypasses XSS restrictions by "wrapping" the Ajax request within a standard <script src="MyAjaxCall?SomeData=SomeValue"> tag. With that in mind, it would seem I'm at the mercy of the browser as to which cookies (if any) will be included in MyAjaxCall. Since the cookies originate from the ASP.NET server, the browser likely won't include them in the call to WCF.
Since this is an intranet application, I cannot necessarily rely on domain wildcarding (*.mydomain.com) to make sure the cookies are shared across multiple machines - the client may well be accessing machines by their simple network name or even IP address directly.
edit: accepting Julian's answer, since using JS to manually grab a cookie's payload and jam it onto the URL seems like the only way to work-around the restriction (tho it feels somewhat inelegant :)
i have a need to generate JSONP using MVC 2 for a 3rd party App...It seems there is no actionresult for this OOTB in MVC 2 so i need to create a custom one..i found the following article on such here; [URL] My first question is...Where do i put the custom actionresult code? Secondly...How can i use this to new JSONP actionresult to return data from my data model? Currently , my current JSON actionresult (remember..i need JSONP) looks like this;
[Code]....
How can i use the new JSONP Actionresult to return db.GetTopGainers()?
I´m using mvc futures 2 with WebApiEnabled for XML and JSON support. But due to cross domain issues with jQuery $.ajax I´m lookin in to JSONP. Is there a simple way to extend futures rest function for JSONP or should I do something else.
We have a series of Silverlight apps that use WCF services via SOAP for just about everything. As we migrate to AJAX we've been hoping to expose the same services via JSONP with little more than config changes on the server.Although the message "Cross domain javascript callback is not supported in authenticated services" seems pretty explicit, I'm hoping there might be a way to allow it. We have a need to expose user-centric data across domains, but we'll need to roll our own JSONP to make it happen if this is a hard "unsupported". It would be even better if there was a way for the server to validate the referrer against the client access policy we provide for Silverlight clients, but for now we just need the general requests to not fail if the user happens to have an auth cookie for our domain from a previous visit.f there's no way to allow this to just work, we're also considering the option of channeling the requests through an IFRAME, but we're definitely open to other recommendations.
I have implemented master pages using this example How to implement a status bar in an ASP.NET application?. I have a property on my SiteMaster.cs inherited MasterPage called Environment. On my MasterPage.master I have this code:
<body> <form id="frmMaster" runat="server"> <.. some content removed for brevity ...> Environment: <%= this.Environment %> </form> </body>
What I would like to do is evaluate this.Environment and if it is "LIVE" then colour the background of this.Environment text red, and if it's "TEST" colour it yellow. How would I do this?
UPDATE I've just added this code to MasterPage.master
I want to call some web-service webmethods on asp.net submit button's click in order to validate the form regarding to some business logic and then I would like to have the button to go on its default behavior if the validation is OK.
How can I stop the aspx page to post-back (after submit button click) and continue submitting the form only if it is allowed by the 'success' function of jQuery.ajax()'s option parameter?
I have a problem to use jquery Plugin/Validation.I want to add a method and follow the documentation but I think I still missing some thing.First I add the method but I think I have a problem to implement it.
I need to implement the following logic [URL] but this one you have to pay for to use commerical is there another way of doing the above in jquery or javascript for example?
I'm just getting started with MVC and wanted to see how I can implement something that resembles the ValidatorCallout in Ajax Control Toolkit. The unobstrusive validator is pretty good but in some cases I really like the call out approach -- seems to get user's attention a bit more aggressively. how to implement that in MVC3.
I want to create a 5 star rating in which 5 stars will show. On mouse over, the color of star will change and it will show Bad, Average, Good, Very Good and Excellent. Near stars currently rated and number of raters will show. On mouse over, "currently rated" and "number of raters" will change into "Rate Now!". If you are rating first time then number of raters is increased by 1 and currently rated is calculated by Adding total ratings of raters divided by number of raters. After your rating the result is shown instantly. If you have already rated then in javascript the message will show that you have already rated this article. For checking that you have rated this article, there will be no login page. we can use cookies or other method to check that this user has alraedy rated this article or not. I want to create this 5 Star rating system using jQuery, ASP.Net, C# and SQL Server.How i will create this,