Hi,

> {\u0027Count\u0027:1}....umm curious about one thing though, you said \" at
> those positions are invalid, but isn't that a javascript unicode
> representation as well?

No, \" is an _escape sequence_ (it represents a double quote), but not
a _Unicode escape sequence_.  (See the spec for details.)  Escapes are
only valid *within* strings.  The whole problem you're having is that
what you're getting back is one big encoded string (quotes around it,
quotes within it escaped, etc.).  Removing the quotes doesn't un-
encode it, it just removes the quotes; and then suddenly all of those
escapes are invalid sequences.

Good luck with it,

-- T.J. :-)

On Nov 2, 12:25 pm, "Nikhil Soneja" <[EMAIL PROTECTED]> wrote:
> I think you're probably right about passing an object to the serializer, had
> mulled over whether I should create a serializable class to return the data,
> instead of a formatted string (might also try returning a list), just
> thought it might still apply the invalid \" around each string property of
> the class though, but I guess the best way is to try! Will also try posting
> to one of the ASP.NET forums, think I'm getting out of scope here.
>
> Reason I said \u0027 was unparseable was because when retrieving that with
> prototype, the responseJSON shows up as undefined...so I figured it must
> have been because of that, but perhaps something else was causing the
> issue....the JSON I had at that point (as per firebug) was
> {\u0027Count\u0027:1}....umm curious about one thing though, you said \" at
> those positions are invalid, but isn't that a javascript unicode
> representation as well?
>
> Thanks so much for all the help!
> Nikhil
>
> On Sun, Nov 2, 2008 at 4:10 PM, T.J. Crowder <[EMAIL PROTECTED]> wrote:
>
> > Hi,
>
> > > ...the problem is the javascript isn't able
> > > to parse the JSON, though it is palpably valid (once I removed the
> > enclosing
> > > quotes using jscript...
>
> > No, at that point you have invalid JSON data.  You said it comes back
> > as:
>
> >    "{\"count\": 0}"
>
> > If you strip off the quotes, that's:
>
> >    {\"count\": 0}
>
> > ...which is not valid, the backslashes cannot appear at that position
> > in the data.  This is valid JSON:
>
> >    {"count": 0}
>
> > To me, it sounds like you're giving the ASP.Net serializer a string,
> > which it's correctly encoding for transfer (hence the quotes and
> > such), where the serializer is expect you to give it an *object* it
> > can serialize for transfer -- e.g., something with a "count" property
> > with the value 0, rather than a string.
>
> > > ...single quotes don't seem to work at all as
> > > they come through as \u0027, which is unparseable
>
> > Er, no, that's perfectly parseable.  It's a JavaScript Unicode escape
> > sequence for a single quote.  "\u0027" is exactly the same as "'" (or,
> > for that matter, "\x27").
>
> > I think you're best off pursuing this in an ASP.Net forum; the problem
> > is in the data being sent back rather than the Prototype JSON parser.
>
> > Good luck with it!
> > --
> > T.J. Crowder
> > tj / crowder software / com
>
> > On Nov 2, 11:31 am, "Nikhil Soneja" <[EMAIL PROTECTED]> wrote:
> > > Thanks for the quick reply TJ, much appreciated....I agree, would not
> > want
> > > to fix on the client side even as a quick fix, because that will leave me
> > > open to browser dependent issues etc...besides would like to keep the
> > > jscript to a minimum, which is why I'm very grateful to have something
> > like
> > > prototype!  My gut also tells me the issues are all related to how I've
> > > written the webservice.
>
> > > I did a lot of research on google though before posting my q, came across
> > > the same articles you mentioned (plus a lot more which sent me off on a
> > > tangent! eg; returning data dictionary types, which failed because those
> > > classes aren't serializable)...I have JSON configured as the return type
> > on
> > > the webservice, and the data is coming through in that format (ie; not in
> > > XML tags, as it would otherwise)...the problem is the javascript isn't
> > able
> > > to parse the JSON, though it is palpably valid (once I removed the
> > enclosing
> > > quotes using jscript, which again I feel is because I'm returning a
> > string
> > > type from the webservice)...whats strange also is that the JSON website
> > > lists \" as the official escape sequence for double quotes, so its
> > strange
> > > that eval doesn't work with that...I do apologize also I'm probably not
> > > wording this that well, but have a huge deadline looming so forgive my
> > > incoherence! :)
>
> > > For reference my webservice has the following header
> > >     <WebMethod(EnableSession:=True)> _
> > >     <ScriptMethod(ResponseFormat:=ResponseFormat.JSON)> _
> > >     Public Function GetPageData(ByVal pageNumber As Integer, ByVal
> > keywords
> > > As String) As String
>
> > > and internally I loop through the rows of a datatable in a dataset and
> > write
> > > it as a JSON string to return.  I reduced this JSON string to a minimum
> > for
> > > testing purposes, which is just the count of records as {""Count"":0} (""
> > is
> > > the escape sequence for VB.NET)...single quotes don't seem to work at
> > all as
> > > they come through as \u0027, which is unparseable
>
> > > my prototype call in my test html file was :
> > > new Ajax.Request('http://localhost/ProjectSearch.asmx/GetPageData',
> > > {
> > >     method:'post',
> > >     contentType:'application/json;charset=utf-8',
> > >     postBody:'{"pageNumber":"4","keywords":"burj al arabi"}',
> > >     onSuccess: function(transport){
> > >      var outputDivObj = document.getElementById('outputDiv');
> > >      outputDivObj.innerHTML = transport.responseJSON.Count
>
> > > // tried this code to parse the json indirectly, later injected the
> > replace
> > > regex in the prototype evalJSON function as // well
> > >       //var trimmed = transport.responseText.replace(/^\"+|\"+$/g, '') ;
> > >       //var jsonObj = eval(trimmed);
> > >       //outputDivObj.innerHTML = jsonObj.Count;
> > >     }
>
> > > });
>
> > > Some weird anomalies, have been debugging the prototype js with Firebug
> > as
> > > well:
> > > responseText = "{\"count\":0}" gets parsed as responseJSON = {"count":0}
> > (as
> > > a string though)
> > > responseText = {\"count\":0}  (with the  enclosing quotes removed) does
> > not
> > > get parsed at all
> > > responseText = {count:0} works fine and gets parsed straight away as a
> > > jscript object
>
> > > For the time being though, I have jettisoned JSON and resorted to
> > XML...of
> > > course that comes with its own issues, as I'm wading through XML Dom
> > parsing
> > > now :)
>
> > > On Sun, Nov 2, 2008 at 2:56 PM, T.J. Crowder <[EMAIL PROTECTED]>
> > wrote:
>
> > > > Hi Nikhil,
>
> > > > Although you could try to fix this on the client side by removing the
> > > > enclosing quotes and changing the escaped double quotes within to just
> > > > double quotes, I think you're better off dealing with the server-side
> > > > so it's returning properly-formatting JSON data.  That'll pay off in
> > > > the long run, and I'm sure ASP.Net's web services stuff can be made to
> > > > return valid JSON.  If not, consider ditching using the web services
> > > > stuff and just use ASP.Net directly.
>
> > > > But if you're going to deal with it on the client-side, you can
> > > > probably do it with a regex (or a series of them) using JavaScript's
> > > > String.replace or Prototype's String.gsub.  Basically, look at the
> > > > string escaping rules in the spec[1] and apply them in reverse.  I
> > > > would suggest *not* being tempted by the easy option of just replacing
> > > > \" with "; you'll need to handle all of the single-character escapes
> > > > (' " \ b f n r t v, I think, but check) as well as hex escapes and
> > > > unicode escapes.
>
> > > > But again, almost certainly best to handle this by fixing what the
> > > > server's returning.  I searched for "+asp.net +"web service" +json"
> > > > and found quite a few articles, including this one[2] that says "The
> > > > default serialization of AJAX-based Web services is JSON." and "...one
> > > > of the major additions of the ASP.NET 2.0 AJAX Extensions is a JSON
> > > > serializer."
>
> > > > [1]
> >http://www.ecma-international.org/publications/standards/Ecma-262.htm
> > > > [2]http://msdn.microsoft.com/en-us/magazine/cc163499.aspx
>
> > > > FWIW,
> > > > --
> > > > T.J. Crowder
> > > > tj / crowder software / com
>
> > > > On Nov 2, 9:19 am, Nikhil <[EMAIL PROTECTED]> wrote:
> > > > > Hi,  Have just started using prototype with ASP.NET 2.0 AJAX
> > > > > Webservices and JSON two days ago, and have run into a very strange
> > > > > roadblock, ok let me explain the basic details of my app first :  My
> > > > > ASP.NET webservice has one function that returns a dataset in JSON
> > > > > format (I've manually transformed the dataset into JSON looping
> > > > > through the rows)...the webservice returns the value as a string
> > > > > (which was the only way I could get it to work)...now when I consume
> > > > > the webservice using AJAX.request, the transport.responseJSON remains
> > > > > a string not an object!  What seems to happen is that there's an
> > extra
> > > > > set of double quotes wrapped around the string returned by the
> > > > > webservice...I have the feeling this is because of the webservice
> > > > > returning a string value.  Ok, now as a test, I modified the
> > > > > javascript evalJSON function to trim the quotes around the string
> > > > > before parsing it using eval...this still doesn't work if any of the
> > > > > parameters inside the JSON formatted string are enclosed in double
> > > > > quotes either, the reason being these get interpreted as \" which is
> > > > > invalid, essentially VB.NET: {""Count"":10} get translated to in
> > > > > transport.responseText as {\"Count\":10}...however as per JSON specs,
> > > > > parameter names and string values must be enclosed in double quotes,
> > > > > so can't do away with it!  If anyone could help out with this
> > two-fold
> > > > > problem ie; double quotes around the returned webservice string
> > > > > result; and the \" issue, I would be eternally grateful!  If anyone
> > > > > has any code samples that would be super as well thanks!  Regards,
> > > > > Nikhil
>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Prototype & script.aculo.us" group.
To post to this group, send email to prototype-scriptaculous@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/prototype-scriptaculous?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to