views:

5031

answers:

1

I've been trying to make an ajax request to an external server. I've learned so far that I need to use getJSON to do this because of security reasons ?

Now, I can't seem to make a simple call to an external page. I've tried to simplify it down as much as I can but it's still not working. I have 2 files, test.html & test.php

my test.html makes a call like this, to localhost for testing :

    $.getJSON("http://localhost/OutVoice/services/test.php", function(json){
 alert("JSON Data: " + json);
});

and I want my test.php to return a simple 'test' :

$results = "test";
echo json_encode($results);

I'm probably making some incredible rookie mistake but I can't seem to figure it out. Also, if this works, how can I send data to my test.php page, like you would do like test.php?id=15 ?


The test.html page is calling the test.php page on localhost, same directory I don't get any errors, just no alert ..

+6  A: 

It could be that you haven't got a callback in test.php. Also, json_encode only accepts an array:

$results = array("key" => "value");
echo $_GET['callback'] . '(' . json_encode($results) . ')';
// the callback stuff is only needed if you're requesting from different domains

jQuery automatically switches to JSONP (i.e. using script tags instead of XMLHttpRequest) when you use http://. If you have test.html and test.php on the same domain, try using relative paths (and no callbacks).

moff
+1. I'm about to implement callbacks in the server-side as well, but if I do choose to host client and server on the same domain, will still using a callback break it?(I'll probably be able to answer my own question in about an hour or so...)
opyate
A callback will always work, even if you request the file from the same domain. It's also proven to be faster to use a JSON callback than requesting and eval'ing the object (since eval is so slow). The Yahoo Flickr team wrote about this a few months ago: http://code.flickr.com/blog/2009/03/18/building-fast-client-side-searches/
moff