I'm having problems with jQuery JSON Response.. I'm passing the information, and getting back the headers, but i don't get the HTML. I've been trying to solve this with JSONP too but still with no results.
<script type='text/javascript'>
$(document).ready(function(){
$("input.senddata").click(function() {
var ipForm = $('input[name="ip_submit"]').val();
var gameForm = $( 'select[name="game_submit"]' ).val()
$.getJSON("http://gamepwn.net/serversdotee/add-server.php",
{
ip: ipForm,
game: gameForm
},
function(data) {
$('#result').html(data);
});
});
});
</script>
the php file:
$data = array('items'=>array('serverip'=>'localhost', 'game'=>'cs','protocol'=>'48'));
echo json_encode($data);
the headers im recieving:
Response Headers
Cache-Control no-cache, must-revalidate
Connection Keep-Alive
Content-Type application/json
Date Tue, 26 Jun 2012 21:49:01 GMT
Expires Mon, 26 Jul 1997 05:00:00 GMT
Keep-Alive timeout=5, max=100
Server Apache/2.2.19 (Unix) mod_ssl/2.2.19 OpenSSL/0.9.8e-fips-rhel5 DAV/2 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 mod_perl/2.0.4 Perl/v5.8.8
Transfer-Encoding chunked
X-Powered-By PHP/5.3.6
Request Headers
Accept application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language et,et-ee;q=0.8,en-us;q=0.5,en;q=0.3
Connection keep-alive
Host gamepwn.net
Origin http://servers.kdfx.eu
User-Agent Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0 FirePHP/0.7.1
x-insight activate
If I have a file test.php with your content like
<?php
$data = array('items'=>array('serverip'=>'localhost', 'game'=>'cs','protocol'=>'48'));
echo $data;
?>
then
$ php -f test.php
produces the output:
Array
I think instead you want to deliver JSON encoded data.
<?php
$data = array('items'=>array('serverip'=>'localhost', 'game'=>'cs','protocol'=>'48'));
echo json_encode($data);
?>
The use of json_encode delivers the output:
{"items":{"serverip":"localhost","game":"cs","protocol":"48"}}
Your javascript tries to pass an object to jQueries .html function, when you need to make a string out of it first. An easy way to achive this is by using code like
<script type='text/javascript'>
$(document).ready(function(){
var pprint = function (data){
var print = "{";
$.each(data, function(key, element){
if($.isPlainObject(element))
element = pprint(element);
print = print + '<br/>' + key + ': ' + element;
});
return print + "}";
};
console.log("test");
$.getJSON("test.php",{}, function(data){
console.log(data);
$("#foo").html(pprint(data));
console.log("done.");
});
});
</script>
where the pprint function does some simple conversion of plain objects to strings. I got the idea to use $.each from this Answer, but there are also more advanced approaches like https://j11y.io/javascript/prettyprint-for-javascript/.
To check on problems of $.getJSON you can use $.ajax:
$.ajax({
url: "test.php",
dataType: 'json',
data: {},
success: function(data){
console.log(data);
$("#foo").html(pprint(data));
console.log("done.");
}),
error: function(jqXHR, textStatus, errorThrown){
console.log(textStatus);
console.log(errorThrown);
}
});
which you can find documented at https://api.jquery.com/jQuery.ajax/. Hopefully this can tell more about the problems you're experiencing.