2012-06-26 3 views
0

У меня проблемы с jQuery JSON Response .. Я передаю информацию и получаю назад заголовки, но я не получаю HTML. Я тоже пытался решить эту проблему с помощью JSONP, но все же без каких-либо результатов.jQuery JSON Response

<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> 

РНР файл:

$data = array('items'=>array('serverip'=>'localhost', 'game'=>'cs','protocol'=>'48')); 
echo json_encode($data); 

ударов головой им ПОЛУЧАТЬ:

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 
+0

Вам нужно «echo json_encode ($ data)». Затем вы получаете объект в JavaScript. Ваш код не возвращает HTML, поэтому вам нужно построить структуру HTML в вашем JavaScript-коде - передача простого объекта в '.html()' не будет работать. – ThiefMaster

+0

добавил json_encode, все еще нет результата – Kristjan

+0

Предполагается ли, что ваши данные должны быть ответом? Помните, что ответ должен быть JSON-кодированными данными, что не так, если вы просто эхо-массив в php. –

ответ

1

Если у меня есть файл test.php с содержимым, как

<?php 
$data = array('items'=>array('serverip'=>'localhost', 'game'=>'cs','protocol'=>'48')); 
echo $data; 
?> 

затем

$ php -f test.php 

производит вывод:

Array 

Я думаю, вместо этого вы хотите, чтобы доставить JSON закодированные данные.

<?php 
$data = array('items'=>array('serverip'=>'localhost', 'game'=>'cs','protocol'=>'48')); 
echo json_encode($data); 
?> 

Использование json_encode обеспечивает вывод:

{"items":{"serverip":"localhost","game":"cs","protocol":"48"}} 

Ваш Javascript пытается передать объект jQueries .html функции, , когда вам нужно сделать строку из него первым , простой способ для того чтобы достигнуть этого с помощью кода, как

<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> 

где функция pprint делает некоторые простые преобразования простых объектов в строки. У меня появилась идея использовать $ .each от this Answer, но есть и более продвинутые подходы, такие как https://j11y.io/javascript/prettyprint-for-javascript/.


Для проверки проблем $ .getJSON вы можете использовать $ .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); 
    } 
}); 

, которые вы можете найти документированы https://api.jquery.com/jQuery.ajax/. Надеюсь, это может рассказать больше о проблемах, которые вы испытываете.

+0

Я также получаю этот вывод, но JSON GET не публикует результат $ ('# result'). Html (data); – Kristjan

+0

Проблема заключается в том, что данные являются объектом и jQuery.html() реагирует на это так же, как на .html (""). Вы можете увидеть другую реакцию, если используете .html («+ данные»), который даст вам «объект объекта». Вам нужно каким-то образом закодировать свой объект в строке, если вы хотите его отобразить. –

+0

Моя консоль показывает «тест», даже данные и «сделано» ... Я пытался весь день исправить это, очень расстраивая:/ – Kristjan