Показать сообщение отдельно
  #7 (permalink)  
Старый 26.12.2015, 14:09
Профессор
Отправить личное сообщение для hoax Посмотреть профиль Найти все сообщения от hoax
 
Регистрация: 20.09.2012
Сообщений: 151

Я не передаю никаких параметров, просто получаю файл (в данном случае). Но даже сейчас я упростил задачу, указав в серверном файле не включение другого файла (как ранее), а простой вывод (echo 'text'), в данном случае ajax возвращает этот самый ECHO, а результат json_encode($o); игнорирует.

Может быть, это связано с тем, что ajax в манипуляциях с json, может возвращать либо JSON-формат, либо ЛЮБОЙ другой результат, как в случае с echo. Простой пример :

1. При таком раскладе все работает.

<!DOCTYPE html>


<html>
<body>

<div id="id01"></div>

<script>
var xmlhttp = new XMLHttpRequest();
var url = "testphp.php";

xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        var myArr = JSON.parse(xmlhttp.responseText);
        myFunction(myArr);
    }
};
xmlhttp.open("GET", url, true);
xmlhttp.send();

function myFunction(arr) {
    var out = "";
    var i;
    for(i = 0; i < arr.length; i++) {
        out += arr[i].small;
    }
    document.getElementById("id01").innerHTML = out;
}
</script>

</body>
</html>


$conn = new mysqli('localhost', 'root', '', 'cms');

$result = $conn->query("SELECT* FROM materials");

$o = null;
while($rs = $result->fetch_array(MYSQLI_ASSOC)) {
    $o[] = $rs;
}


$conn->close();

echo json_encode($o); // возвращает  то, что нужно


однако стоит изменить серверный файл вот так

echo json_encode($o);
echo 'text';


все отказывается работать. Результат - не возвращает ничего.

НО. если возвращать данные не в json-формате - все ОК

<html>
<body>

<div id="id01"></div>

<script>
var xmlhttp = new XMLHttpRequest();
var url = "testphp.php";

xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        document.getElementById("id01").innerHTML = xmlhttp.responseText;
        //myFunction(myArr);
    }
};
xmlhttp.open("GET", url, true);
xmlhttp.send();

function myFunction(arr) {
    var out = "";
    var i;
    for(i = 0; i < arr.length; i++) {
        out += arr[i].small;
    }
    document.getElementById("id01").innerHTML = out;
}
</script>

</body>
</html>


$conn = new mysqli('localhost', 'root', '', 'cms');

$result = $conn->query("SELECT* FROM materials");

$o = null;
while($rs = $result->fetch_array(MYSQLI_ASSOC)) {
    $o[] = $rs;
}


$conn->close();

print_r($o); // array
echo 'text'; // выводит

Последний раз редактировалось hoax, 26.12.2015 в 14:12.
Ответить с цитированием