? is a reserved character in URLs (it separates the domain from the GET
parameters) and must be encoded if it's data.

http://www.blooberry.com/indexdot/html/topics/urlencoding.htm

Scott

On Dec 4, 2007 2:00 PM, Ben Bennett <[EMAIL PROTECTED]> wrote:

>
> This is my first post so I really should thank everyone for a
> fanatastic library.
>
> However, I think I have found a bug...
>
> Using jQuery 1.2.1, if I have:
>
> $.ajax({
>  type: "POST",
>  url: "test.html",
>  dataType: "json",
>  data: {query: queryString},
> });
>
> When queryString starts with a ? it will get converted to
> jsonp1231234124...
>
> This is clearly happening because of the code at line 2226 of the full
> release version:
>                // Build temporary JSONP function
>                if ( s.dataType == "json" && (s.data &&
> s.data.match(jsre) || s.url.match(jsre)) ) {
>                        jsonp = "jsonp" + jsc++;
>
>                        // Replace the =? sequence both in the query
> string and the data
>                        if ( s.data )
>                                s.data = s.data.replace(jsre, "=" +
> jsonp);
>                        s.url = s.url.replace(jsre, "=" + jsonp);
>
> ...
>
> But I see no way to prevent that from happening.
>
> Now... one might suggest that I should avoid a leading ? in my option
> names.  But I am taking them from input boxes and ? is a valid thing
> for a user to type.  Unfortunately there seems to be no good way to
> escape the string to prevent this behavior (without teaching the
> called code how to unescape it).
>
> Also, the docs don't mention that the =? escaping happens to a json
> dataType... I see it for jsonp.
>
> Is this behavior intentional?  If so, there should be a way to
> suppress it or at a way for the calling code to escape the values to
> cause a leading ? to be passed to the server.
>
> -ben
>



-- 
--
Scott Trudeau
scott.trudeau AT gmail DOT com
http://sstrudeau.com/
AIM: sodthestreets

Reply via email to