2011-12-19 3 views
1

Я получаю два случайных значения из таблицы. Значения находятся в одной строке.Улучшенный подход для отображения двух переменных переменных PHP jQuery Ajax

<?php 
    $result = mysql_query("SELECT * FROM people ORDER BY RAND() LIMIT 1", $connection); 
    $row = mysql_fetch_array($result); 
    echo $row["name"]; 
    echo $row["surname"]; 
?> 

И я хочу, чтобы отобразить эти два значения при различных DIV на моей HTML-страницу с помощью функции JQuery Ajax.

$(function() 
{ 
    $("#sentence-form").submit(function() 
    { 
     $.ajax(
     { 
      type: "GET", 
      url: "newperson.php", 
      success: function(response) 
      { 
       $("#top-container").append(response); /* Both name and surname */ 
      } 
     }); 
    }); 
}); 

Проблема заключается в разделении двух значений для отображения разных в div. Я попытался использовать два вызова Ajax, и я отправляю логические данные в PHP для использования с оператором if. Таким образом, один из вызовов Ajax отображает имя, а другой показывает фамилию. Но из-за рандомизации немного сложно найти фамилию имени.

Что такое лучший подход?

ответ

8

Да: отправить данные в структуре данных - возможно, JSON - поэтому ваш код на стороне клиента знает, какой бит это.

Во-первых, передавать данные с json_encode функции РНР:

echo json_encode(array(
    'name' => $row['name'], 
    'surname' => $row['surname'] 
)); 

Затем использовать возможности браузера для синтаксического анализа JSON:

$.ajax({ 
    type: "GET", 
    url: "newperson.php", 
    dataType: 'json', 
    success: function (response) { 
     $("#name-container").append(response.name); 
     $("#surname-container").append(response.surname); 
    } 
}); 

response теперь является объектом Javascript (что-то вроде {name: 'John', surname: 'Smith'}), так вы можете получить доступ к двум частям в качестве обычных членов объекта.

2

Отправить переменные как массив JSON

<?php 
    $result = mysql_query("SELECT * FROM people ORDER BY RAND() LIMIT 1", $connection); 
    $row = mysql_fetch_array($result); 
    $output['name'] = $row["name"]; 
    $output['surname'] = $row["surname"]; 
    echo json_encode($output); 
?> 

А на код JavaScript, доступ к нему, как:

data.name и data.surname

1

Хотя мне нравится ответ lonesomeday, и я думаю, что это путь, я вышлю альтернативу:

Соответствующий PHP:

echo $row["name"].'||'.$row["surname"]; 

Соответствующий код JavaScript:

success: function (response) { 
    var parts = response.split('||'); 
    $("#name-container").append(parts[0]); //name 
    $("#surname-container").append(parts[1]); //surname 
} 
+0

1) не сработает, если имя содержит "||" по какой-то причине. 2) Почему НЕ использовать JSON? – gregmac

+0

@gregmac. Пожалуйста, прочтите мое заявление перед примером кода ... Если бы вы сделали это, скорее всего, вы не отправили бы свой комментарий. Однако, если по какой-либо причине это выбрано, и более предпочтительным методом JSON не является разделитель, можно просто обновить его в обоих сценариях. –

1

Используйте это:

<?php 
    $result = mysql_query("SELECT * FROM people ORDER BY RAND() LIMIT 1", $connection); 
    $row = mysql_fetch_array($result); 
    echo $row["name"]."&".$row["surname"]; 
?> 

$(function(){ 
    $("#sentence-form").submit(function(){ 
    $.ajax({ 
     type : "GET", 
     url : "newperson.php", 
     success : function(response){ 
     items=response.split('&') 
      $("#top-container").append(items[0]); /* name */ 
      $('#bottom-container").append(items[1]);//*s(u should be i)rname */ 
     } 
     }); 
    }); 
}); 
+1

1) не удастся, если имя содержит «&» 2), вы разделяете пробел, а не «&» 3) «фамилия» действительно написана правильно 4) почему это лучше, чем JSON, который является стандартом и уже обрабатывает кодирование/экранирование и расщепление? – gregmac

+0

кричит. Сначала я думал об использовании пробела, а затем подумал, что вполне вероятно, что первое или последнее имя может содержать пробелы, поэтому изменилось на &. редактирование сейчас. Путь вокруг всей этой проблемы состоял в том, чтобы кодировать их в json, например, но это кажется слишком сложным для того, что пытается сделать Хем. – bigblind

+0

* [фамилия] (https: //en.wiktionary.org/wiki/surname # Noun) * Совершенно верно: * имя, которое лицо делится с другими членами семьи этого человека, отличающееся от имени или имени этого лица; фамилия. *. Можете ли вы отредактировать свой ответ? –