Поведение обратного дата Ajax


Мои сомнения, технику.

Хотел бы лучше понять, что произошло. Я провел несколько дней, пытаясь решить проблему в моем коде. Я обнаружил, что функции ajax php неправильны. Две функции PHP были очень похожи, но один работает, а другой нет. Оба должны возвращать переменную $resposta, HTML-код должен быть вставлен в страницу. Ex:

$resposta = '<span>Alô mundo!</span>';

В конце, я заметила, что он работал, имел линий код:

echo $resposta;
return $resposta;

И что не работал, имел только

return $resposta

Оказывается, что команда " эхо " было то, что действительно работает. Итак, мой вопрос: если функция ajax говорила:

function chamaM(id_chamado){ //-------> Estava funcionando
    $.ajax({
        type: 'POST',
        url: 'scriptPHP3.php',
        data: 'id=' + id_chamado,
        success: function(data){
            $('#teste').html(data);
        }
   });
}

function chamaTb(id_chamado, id_m){ //-------> NÃO estava funcionando
    $.ajax({
        type: 'POST',
        url: 'scriptPHP3.php',
        data: { id: id_chamado, ind_m: id_m },
        success: function(data){
            $('#teste').html(data);
        }
   });
}

, Потому что 'success' возвращает 'эхо', а не 'return'? Спрашиваю, потому что только я положил эхо, чтобы увидеть, если функция работает. В противном случае, было бы пытаясь понять, ошибка до сих пор. Большое вас спасибо за ответ. Если нужно, вот код актуально в HTML и PHP:

.HTML

    <div id="menu-container">
        <a id="m1" class="ativo">m1</a>
        <a id="m2">m2</a>
        <a id="m3">m3</a>
    </div><!-- #menu-container -->

    <div id="teste">/*DIV ONDE SERÁ POSTO O CONTEÚDO PROCESSADO*/</div>


.PHP

if (isset( $_POST["ind_m"] ) && isset( $_POST["id"] ) ) {
    cliqueTb( $_POST["id"], $_POST["ind_m"] );
} elseif (isset ($_POST["id"] ) ) {
    cliqueM( $_POST["id"] );
 }

function cliqueTb( x, y ) { //-------> NÃO estava funcionando
    PROCESSAMENTO;
    return $resposta;
}

function cliqueM( x ) { //-------> Estava funcionando
    PROCESSAMENTO;
    echo $resposta;     //-------> 'echo' retorna o valor e não o 'return'
    return $resposta;
}
Author: Caputo, 2014-07-25

2 answers

Ваш технический вопрос имеет ответ-очень просто.

AJAX-это метод, чтобы приказать в содержание адрес "за кулисами". Такой контент output, что сервер отправил браузеру, как ответ.

И в том, что приложение отправляет содержимое? Эхом / "printando" что-то в программе. Когда запрос, если завершить, то содержимое будет показано для тех, кто заказали, будь то человек, будь подпрограммы программный.

Return не производит контент, он получает поток выполнения программы в локальной области функции для глобального/внешний:

$name = 'Bruno Augusto';

$age = getAge();

function getAge() {
    return 26;
}

echo 'Nome: ', $name, ' .Idade: ', $age; // Nome; bruno Augusto. Idade: 26

И в то Время как настройка переменных, мы в глобальной области видимости внешнего. Следовательно, у нас есть функция PHP, которая имеет область действия собственных, местных, независимых. И после того как мы echo, обратно к глобальной области действия, который показывает фразу.

Без return код работает войдет в функцию, когда таким же был вызван ($age), но никогда не выйдет из нее.

И return не производит контент, а не будет существовать Response Body. И если не имеет тела, не имеет с тем, что AJAX работать.

 3
Author: Bruno Augusto, 2014-07-26 16:32:08

Ваш код JavaScript/jQuery делает запрос HTTP на сервер. PHP получает, обрабатывает и отвечает на этот запрос. Двумя языками (JavaScript и PHP), не говорят напрямую, только через запросы и ответы HTTP.

В случае HTML, HTTP-ответ, в основном текст, содержащий HTML. Команда echo PHP пишет в выходных данных программы, что и будет для ответа HTTP. return не пишет в выходной, просто заставляет функцию возвращать значение, для которого вызвал (за собственный PHP). И вызов, который не работает, был в этой строке:

cliqueTb( $_POST["id"], $_POST["ind_m"] );

Строка ничего не делает, с возвратом из функции. Она могла бы написать возвращаемое значение в выходе из программы, которая была бы другой способ сделать содержимое отображается в HTTP-ответа:

echo cliqueTb( $_POST["id"], $_POST["ind_m"] );
 1
Author: bfavaretto, 2014-07-25 20:41:58