Michael
Michael

Reputation: 33

JQUERY Autocomplete using PHP and cross-site problem

I am trying to load a series of cities/countries in a textbox to display using jquery autocomplete. To do this, I attach the autocomplete to the textbox and call a PHP routine called SEARCH.php. This works fine if SEARCH is on the same server.

When I try to call search from a different server (in this case, an ASP server), I get a javascript PERMISSION DENIED error, I guess due to the cross-scripting issue. The problem is caused by the line

xhr.open(type, s.url, s.async);

in jquery1.3.2

Is there any solution to this?

Thanks for any help

Upvotes: 3

Views: 864

Answers (2)

MicE
MicE

Reputation: 5128

I assume that your PHP and ASP servers run on a different (sub)domain - if so, then you assume correctly that this is a cross-domain scripting limitation as defined by Javascript standards.

As far as I know, there is no pure Javascript solution with good cross-browser compatibility (some browsers may have more relaxed restrictions). In the long run we can all hope this to be resolved by Cross-Origin Resource Sharing which is being defined as part of HTML5:
http://www.w3.org/TR/access-control/

Ways how you can work around this today:

  1. Use a server-side proxy script
    You can create a new script on your PHP server (i.e. ASP-Proxy.php) which would fetch the data from the ASP server. This will allow you to avoid the cross-domain limitation, since the PHP script would reside on the same server as the Search.php script which you confirmed works correctly.
    Google revealed this very simple implementation, but there is a lot of more robust and/or safe scripts out there.

  2. Use flash to perform the query
    Flash has its own mechanism for handling cross domain requests, so you can use a small Flash object on your site to serve as a client-side proxy for your jQuery script. I'm not a Flash developer, so someone else will have to advise here:
    http://www.google.com/search?q=flxhr+jquery

    Note that you might need to create a cross-domain policy file in the root of your ASP server for this to work:
    http://www.google.com/search?q=crossdomain.xml

Upvotes: 3

Jeremy
Jeremy

Reputation: 22435

The easiest solution is to have a script on your server call the other server's script and then return the results from your server.

Upvotes: 1

Related Questions