Как отобразить ответ JSON в отдельных строках, используя jQuery и PHP - PullRequest
1 голос
/ 27 апреля 2011

Я использую AJAX для отправки формы и хотел бы отобразить сводную информацию на странице, чтобы пользователь мог подтвердить информацию перед отправкой.У меня проблемы с отображением результатов в нескольких строках.Любые предложения о том, как это сделать?

Вот PHP:

$return['message'] = 'First Entry: ' . $_POST['Name1'] . ' '  . 'Second Entry: ' .    $_POST['Name2'] . ' ' . 'Third Entry: ' . $_POST['Name3'];  

echo json_encode($return);

Вот jQuery:

$("#mark-form").validate({
    submitHandler: function(form) {
            $(form).ajaxSubmit({                  
                type: "POST",
                data: {
                    "Name1" : $('#Name1').val(),
                    "Name2" : $('#Name2').val(),
                    "Name3" : $('#Name3').val()
                       },
                dataType: 'json',
                url: './includes/ajaxtest3.php',
                error: function() {alert("Error");},
                success: 
                function(data) {
                    $('<div id="output2"></div>').insertAfter($('#agreement-information'));
                    $('#output2').html(data.message).show(500);
                    $('#ouput2').append(data);  
                },       
  });

return false;   
   },
        errorPlacement: function(error,element) {
                        return true;
                },
        rules: {
            "Name1": {
                required: true,
                }
        }       
});

Ответы [ 4 ]

1 голос
/ 28 апреля 2011

Вы можете переносить закодированные JSON HTML-строки следующим образом:

$return['message'] = 'First Entry: ' . $_POST['Name1'] . '<br /> '  . 'Second Entry: ' .    $_POST['Name2'] . '<br /> ' . 'Third Entry: ' . $_POST['Name3'];  
echo json_encode($return);

Или конвертировать символы новой строки (\ n) в теги новой строки.

Хотя лучше было бы оставить такую ​​обработку клиенту, например, возвращение массива сообщений:

$return['message'] = array();
$return['message'][] = 'First Entry: ' . $_POST['Name1'];
$return['message'][] = 'Second Entry: ' . $_POST['Name2'];
$return['message'][] = 'Third Entry: ' . $_POST['Name3'];
echo json_encode($return);

И оставить обработку клиенту (возможно, клиент захочет, чтобы сообщения были обернуты в тег абзаца позже):

function(data)
{
    $('<div id="output2"></div>').insertAfter($('#agreement-information'));
    $('#output2').html(data.message.join('<br />')).show(500);
    $('#ouput2').append(data);  
}
0 голосов
/ 27 апреля 2011

Вам необходимо вставить теги <br /> или вставить \n, а затем поместить содержимое в тег pre.Помните, что вы внедряете этот контент в HTML DOM, поэтому правила html все еще применяются: -)

0 голосов
/ 27 апреля 2011
$return['message'] = 'First Entry: ' . $_POST['Name1'] . '<br />'  . 'Second Entry: ' .    $_POST['Name2'] . '<br />' . 'Third Entry: ' . $_POST['Name3'];
0 голосов
/ 27 апреля 2011

Обычно вы хотите использовать json_encode для массивов.Таким образом, ваш массив PHP будет выглядеть так:

$arr = array('foo' => 1, 'bar' => 2, 'baz' => 'test');
// you can probably just use $_POST here, i.e. $arr = $_POST

echo json_encode($arr);

А ваш JavaScript, работающий с этой переменной data, будет выглядеть так:

$('#id').html(data.foo + "<br />" + data.bar + "<br />" + data.baz);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...