2015-04-01 2 views
0

У меня есть мой сценарий ниже, Текущий скрипт будет выводиться следующим образом.PHP/JQUERY - отображает каждый вспомогательный массив json

[ "Error1", "Error2", "Error3"]

[ "Good1", "Good2", "Good3"]

Я хочу, чтобы результат каждого Ошибка в отдельном пункте и каждый хороший в другом пункте

PHP скрипт

 $Error[] = "Error1"; 
     $Error[] = "Error2"; 
     $Error[] = "Error3"; 

     $Good[] = "Good1"; 
     $Good[] = "Good2"; 
     $Good[] = "Good3"; 

     $Data["Error"] = json_encode($Error); 
     $Data["Good"] = json_encode($Good); 

     die(json_encode($Data)); 

Jquery сценария

function _Request() 
    { 
     $("form").submit(function(e) 
     { 
      e.preventDefault(); 

      $.ajax(
      { 
       url: $(this).attr("action"), 
       type: "POST", 
       data: $(this).serializeArray(), 
       dataType: 'json', 
       success: function(Result) 
       { 
        var Data = ""; 

        $.each(Result, function(Index, Item) 
        { 
         Data += "<p>" + Item + "</p>"; 
        }); 

        $("#Result").html(Data); 
       } 
      }); 
     }); 
    } 
+0

Что происходит, когда вы запустить свой код? Кроме того, почему вы используете 'die()'? Вы, скорее всего, хотите «echo». –

+0

Пожалуйста, можете быть более конкретным? Что вы подразумеваете под каждой «ошибкой» и каждым «хорошим». Это образцы данных. Как вы хотели их представить? Как строка JSON или CSV [например]. cheers – Sanosay

+0

@ amura.cxg по какой-то причине, когда я использую эхо-скрипт, выведет всю страницу, он покажет только основные массивы (Error and Good) со всем вспомогательным массивом в абзаце, я хочу отдельные вспомогательные массивы – DarkOne

ответ

0

Не JSON кодирования массивов в отдельности, просто кодировать полную структуру данных, в конце, в противном случае при декодировании на стороне клиента, ваш вложенная JSON будет просто рассматриваться как строка.

Так что это:

$Error[] = "Error1"; 
    $Error[] = "Error2"; 
    $Error[] = "Error3"; 

    $Good[] = "Good1"; 
    $Good[] = "Good2"; 
    $Good[] = "Good3"; 

    $Data["Error"] = $Error; 
    $Data["Good"] = $Good; 

    echo json_encode($Data); 

Вы бы тогда работать с данными на стороне клиента, как это:

 $.ajax(
     { 
      url: $(this).attr("action"), 
      type: "POST", 
      data: $(this).serializeArray(), 
      dataType: 'json', 
      success: function(data) 
      { 
       var $result = $('#Result'); 
       $result.empty(); 

       $.each(data.Error, function(idx, item) { 
        $result.append('<p class="error">' + item + '</p>'); 
       }); 

       $.each(data.Good, function(idx, item) { 
        $result.append('<p class="good">' + item + '</p>'); 
       }); 
      } 
     }); 

Примечание я добавил имена классов пунктов в случае, если вы желая контролировать отображение CSS из них через удобные классы.

+0

ваше уведомление помогает решить проблему – DarkOne

0

Вы имеете в виду вот это?

   var Data = ""; 

       // error 
       $.each(Result.Error, function(Index, Item) 
       { 
        Data += "<p>" + Item + "</p>"; 
       }); 

       //Good 
       $.each(Result.Good, function(Index, Item) 
       { 
        Data += "<p>" + Item + "</p>"; 
       }); 

       $("#Result").html(Data); 
+0

yeap, я искал это, проблема решена, спасибо всем – DarkOne

0

Вы должны добраться до второго уровня

Если предположить, что ваши данные:

Result = {Error:["Error1","Error2","Error3"], 
Good:["Good1","Good2","Good3"]} 

Тогда ...

$.each(Result, function(Index, Item) 
    { 
    $.each(Item, function(i,d){  
     Data += "<p>" + d + "</p>"; 
    }) 
}); 

вот скрипку: http://jsfiddle.net/charrisgw/kjqdhfec/

Смежные вопросы