2013-03-13 3 views
0

У меня проблема с возвратом JSON из PHP в Javascript. Ниже мой PHP для создания JSON:PHP json_encode to Javascript undefined/null

$environment[] = array('id' => $env, 'adjacencies' => $hostnames); 

foreach($hostnames as $hostname) { 
     $environment[] = array('id' => $hostname, 'name' => $hostname, 'data' => array()); 
    } 

return json_encode($environment);; 

Когда я распечатайте json_encode среды в текстовый файл, он возвращается, как:

[{"id":"Dev","adjacencies":["tb23","tbwag","tbvg","tbut"]},{"id":"tb23","name":"tb23","data":[]},{"id":"tbwag","name":"tbwag","data":[]},{"id":"tbvg","name":"tbvg","data":[]},{"id":"tbut","name":"tbut","data":[]}] 

кажется, что это печать должным образом, но когда я верните его в Javascript, чтобы он возвращался как undefined/null. Ниже Javascript с вызовом АЯКС:

var ajax = new AJAX(); 
var args = "id=" + $("#apps").val() + "&env=" + node.id + "&nocache=" + (new Date()).valueOf(); 
ajax.connect("POST", "http://" + window.location.hostname + "/project/graph/host", args, function(json) { 

var output = ''; 
for (property in json) { 
    output += property + ': ' + json[property]+'; '; 
} 
alert(output); 
}); 

Я, очевидно, пробовал много разных вещей, чтобы получить его, чтобы распечатать, но не везло. В PHP я пробовал json_last_error и возвращался как «0», а это значит, что в структуре JSON нет проблемы.

В конце концов, я хотел бы использовать следующую команду в JavaScript, чтобы продолжать строить свой график:

var hostNodes = eval('(' + json + ')'); 

Любая помощь приветствуется, почему я не могу получить это, чтобы вернуться!

+0

Где $ env и $ hostnames? Его нет. Я изменю свой ответ, если вы действительно просто забыли упомянуть об этом, и это не проблема. – Jonast92

+0

Эти переменные работают нормально, поэтому я их оставил; они создаются в другой функции. Для всех интенсивных целей в этом примере они могут быть жестко закодированы. – ad2387

+0

PHP работает отлично, вы, очевидно, ошибаетесь в javascript. – Jonast92

ответ

1

свой PHP код в уникальный файл, который принимает один пост параметров, а затем построить массив JSON, если он установлен, и в нижней части вы можете сделать

echo json_encode($json); 
flush(); 

Я не профессионал с чистым JavaScript и я не знаком с вашим подходом, но вам стоит подумать об использовании jQuery, по крайней мере, я собираюсь предложить один из способов получить массив json, чтобы вы могли легко работать с ним (вы также убедитесь, что данные json):

$.ajax(
{ 
    // Post select to url. 
    type : 'post', 
    url : 'myPHPAjaxHandler.php', 
    dataType : 'json', 
    data : 
    { 
     'select' : true 
    }, 
    success : function(data) 
    { 
     // PHP has returned a json array. 

     var id, hostname; 

     for(var i = 0; i < data.length; i++) 
     { 
      id = data[i].id; 
      hostname = hostname[i].id; 
      // Construct a string or an object using the data. 

     } 
    }, 
    complete : function(data) 
    { 
     // Optional. 
    } 
}); 

Как я уже сказал, вам решать, будете ли вы забрать его или нет. Это может пригодиться для сложных проектов.

+0

Но вы используете JQuery, а он не – Ateszki

+0

Я понимаю, может быть, мне нужно просто удалить это или позволить ему увидеть это, и, возможно, он решит забрать его. Можно сказать, что я просто предлагаю библиотеку на том же языке, что и он. – Jonast92

+0

Не удаляйте его, но отредактируйте свой ответ, чтобы очистить его. – Ateszki

1

Похоже, вы считаете, что данные, переданные функции обратного вызова, будут вашим JSON уже проанализированы в объекты JS, но я не вижу никаких указаний на то, что это будет так; скорее всего, необработанные данные JSON, которые должны быть проанализированы в JS-объектах с использованием JSON.parse (NOT eval() - eval(), очень опасны, вы всегда должны предпочитать JSON.parse при работе с истинными данными JSON, поскольку это не позволит Атаки типа XSS, поскольку они обычно не являются «чистыми» JSON.)