简体   繁体   中英

How to get an Ajax request from an external server using client side JavaScript

I'm trying to write a utility in my blog system as a post. The limitations are that I can not run any server side code. I can only run client side (JavaScript) code. I would like to send a request to an external domain and parse that result.

For example, based on how people use my utility, I would want to be able to get the HTML of a page such as http://example.com/getPage.html?page=A , which might contain:

<html>
...
<body>
...
  <table id="targetTable">
    <tr><td>Some Data</td></tr>
    <tr><td>Some Data</td></tr>
    <tr><td>Some Data</td></tr>
  </table>

... which I would store in a JavaScript string and then query to find the data I want.

I want to query this page from an external domain (ie my script is not running on http://example.com , nor am I affiliated with http://example.com ) using client side code only.

I'm using jQuery and it says that the jQuery.get() method would not work due to the same origin policy . Is there any way to do what I want some other way? For example, loading an iframe then reading its html property somehow?

You might want to take a look at JSONP and the more recent CORS . Using these technologies still doesn't guarantee that you'll be able to do what you want using only Javascript and no server side code...

I'm afraid that is impossible. You can work around it using a convention called jsonp, but that will only be able to retrieve json objects (even if those of course can contain html-strings). But a server can only respond to a jsonp request if it has builtin support for it.

The most straightforward workaround for your problem would be to create a tiny server that gets html pages and returns json-data. Then you can send your ajax calls to that server (like this: http://www.yourserver.com/?page_to_get=http%3A%2F%2Fwww.example.com%2FgetPage.html%3Fpage%3DA ), let it fetch data from example.com and return it to your client side script as json.

Just to strengthen my argument, a piece quoted from jQuery's AJAX page:

Due to browser security restrictions, most "Ajax" requests are subject to the same origin policy; the request can not successfully retrieve data from a different domain, subdomain, or protocol.

Script and JSONP requests are not subject to the same origin policy restrictions.

You can load an iframe from another domain or make POST calls to another domain.

Luckily for our security but unfortunately for your problem, you can't read anything with Javascript due to the Same Origin Policy.

If you can't get any cooperation from the other domain. eg: with JSONP enabled or a window.postMessage then the only solution you have is to use a web server as a proxy.
The server that delivers your page or a free(if your trafic isn't huge) instance like Google App Engine, where you have a hand on.

You call this server in ajax, JSONP or an iframe + window.postMessage with a generic service that will fetch the page content and deliver it to the browser.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM