Вернуть собственный текст БЕЗ парсинга из PHP-скрипта в ajax-скрипт

Привет, я не уверен, как вернуть неповрежденные данные в текст ответа объекта xmlhttprequest с помощью innerhtml, то есть без разбора. В листинге 1 это работает. Но когда я использовал листинг 2, как показано ниже, для отправки текста из php, это не сработало. А в листинге 3 показан php-скрипт. На выходе я вижу, что return - это текст, а не обработка функцией dygraph. Спасибо заранее.

Listing1:-
    xmlhttp.onreadystatechange=function()
     {
          if (xmlhttp.readyState==4 && xmlhttp.status==200)
      {
             z = new Dygraph(document.getElementById("showrealchart"),
                  "Batch,S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,\n" +
"1, 3.65, 5.00, 4.53, 5.01, 10.50, 0.03, 9.05, 5.05, 5.22, 6.23\n"+
"7, 3.65, 5.03, 4.50, 5.02, 9.50, 0.05, 9.15, 5.55, 5.20, 6.23\n"+
"8, 3.67, 5.00, 4.53, 4.99, 9.00, 0.04, 9.30, 5.10, 2.30, 6.22\n"+
"12, 3.65, 5.04, 4.53, 4.99, 10.05, 0.35, 9.00, 5.23, 5.20, 6.21\n"+
"16, 3.66, 5.00, 4.50, 4.98, 10.50, 1.01, 9.01, 5.20, 5.10, 6.24\n"+
"18, 3.65, 5.02, 4.70, 5.00, 9.80, 0.45, 9.14, 5.63, 5.15, 6.23\n");
      }
     }

Теперь я хотел бы вернуть данные в точной форме.

Listing 2:-
xmlhttp.onreadystatechange=function()
        {
            if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                z = new Dygraph
                document.getElementById("showrealchart").innerHTML=xmlhttp.responseText;

И Php-скрипт.

Listing 3;-
<?php
print '"Batch,S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,\n" +
"1, 3.65, 5.00, 4.53, 5.01, 10.50, 0.03, 9.05, 5.05, 5.22, 6.23\n"+
"7, 3.65, 5.03, 4.50, 5.02, 9.50, 0.05, 9.15, 5.55, 5.20, 6.23\n"+
"8, 3.67, 5.00, 4.53, 4.99, 9.00, 0.04, 9.30, 5.10, 2.30, 6.22\n"+
"12, 3.65, 5.04, 4.53, 4.99, 10.05, 0.35, 9.00, 5.23, 5.20, 6.21\n"+
"16, 3.66, 5.00, 4.50, 4.98, 10.50, 1.01, 9.01, 5.20, 5.10, 6.24\n"+
"18, 3.65, 5.02, 4.70, 5.00, 9.80, 0.45, 9.14, 5.63, 5.15, 6.23\n";';
?>

person user1739825    schedule 12.10.2012    source источник
comment
вы можете использовать ‹br› вместо \n, так как html не угрожает новой строке в качестве модификатора отображения при рендеринге.   -  person rroche    schedule 12.10.2012
comment
user1739825 Может быть, я неправильно понял ваш вопрос. Вы пытались поставить header('Content-type: text/plain') перед печатью результата   -  person Rezigned    schedule 12.10.2012
comment
В javascript "\n" на самом деле означает перевод строки, поэтому ваш z в листинге 1 должен получить многострочную строку; Но в вашем PHP в листинге 3 вы отправляете литерал \n и двойные кавычки. Я думаю, это может быть то, что вы хотите проверить.   -  person Passerby    schedule 12.10.2012
comment
Привет всем. Только что узнал, что есть статья по этому вопросу, касающаяся собственных данных, отправленных по запросу xmlhttprequest. Это может быть полезно для вас, хотя решение не работает. ‹dygraphs.com/data.html› @Rezigned   -  person user1739825    schedule 12.10.2012


Ответы (2)


Вы возвращаете строковый литерал. Это не сработает, так как на самом деле вы получите:

document.getElementById("showrealchart").innerHTML="\"Batch, ....\"";

Обратите внимание, что кавычки двойные.

Если вы удалите кавычки из PHP, например:

print 'Batch,S1,S2...\n1 3.65...\n';

ваш обратный вызов javascript получит это как строку для использования.

Или, если вам нужна длинная версия на PHP, вы можете сделать одно из следующих действий:

$res = print 'Batch,S1,S2...\n' .
       '1, 3.65, ...\n' .
       ....;
print $res;

Но также в зависимости от того, что ваш клиент Js делает с данными, вы можете поиграть с битами \n, отправить все это как JSON или сделать что-то еще.

person Zlatko    schedule 12.10.2012

Я не совсем понимаю, почему вы выполняете код в листинге 1 и 2 по-разному. Но я верю, что это то, чего вы хотите.

Листинг 2.

var z = new Dygraph(document.getElementById("showrealchart"), xmlhttp.responseText);

Листинг 3.

<?php
# ... is the rest of your data
echo <<<TXT
Batch,S1,S2,S3,S4,S5,S6,S7,S8,S9,S10
1, 3.65, 5.00, 4.53, 5.01, 10.50, 0.03, 9.05, 5.05, 5.22, 6.23
7, 3.65, 5.03, 4.50, 5.02, 9.50, 0.05, 9.15, 5.55, 5.20, 6.23
...
...
TXT;
?>
person Rezigned    schedule 12.10.2012