Amr Elgarhy
Amr Elgarhy

Reputation: 68952

can jquery ajax call external webservice?

Can jquery ajax code call a webservice from another domain name or another website?
Like this:

$.ajax({
    type: "POST",
    url: "http://AnotherWebSite.com/WebService.asmx/HelloWorld",
    data: "{'name':'" + $('#price').val() + "'}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (msg) { alert(msg); }
});

And how should I config this webservice?

Upvotes: 3

Views: 16783

Answers (5)

Philip Tinney
Philip Tinney

Reputation: 2016

You need to use a JSONP call. Last two paragraphs on this page. Go over the basics.

Upvotes: 1

Serg
Serg

Reputation: 2946

Making requests for other domains are forbidden in the most browsers due to Same origin policy.

A few exceptions are

  • a user-side extensions, like GreaseMonkey
  • javascript include from the script tag
  • adobe flash application with properly configured server

Upvotes: 0

Dan Appleyard
Dan Appleyard

Reputation: 7445

What is commonly done is have your jQuery call a web service on your server, and have that web service communicate with the external web service. Not the most preferred method, but it works.

Upvotes: 0

mkoryak
mkoryak

Reputation: 57958

you can use JSONP to make cross domain requests. with jquery you can make a jsonp request using the $.json function and specifying a callback in the url like so:

&callback=?

Actually, all you need is the question mark as the param value, the param name can be anything.

Only catch, is that the server you are making the request to must support jsonp

For more in depth information see this blog post about making jsonp work with the new york times json api:

http://notetodogself.blogspot.com/2009/02/using-jquery-with-nyt-json-api.html

Upvotes: 7

Benson
Benson

Reputation: 22847

No, requesting something from a web server other than the one your code came from is the underpinning of what's called a Cross Site Scripting (XSS) attack. As such, that ability is forbidden. There are ways around it, but they are hacky at best.

The one I've heard the most about is writing a flash application that makes a TCP connection to the server in question.

Upvotes: 0

Related Questions