Ajax отказывается отправлять данные при очень странных обстоятельствах - PullRequest
1 голос
/ 26 ноября 2011

У меня есть форма, в которой мне нужно отправить данные, выбранные через AJAX.Идея заключается в том, что после выбора данных формы ajax-вызов, отправленный через jQuery.get(), вызывает другую функцию, которая получает и декодирует данные в PHP и использует эти данные в качестве идентификатора для получения дополнительных данных из базы данных.Затем данные из базы данных перекодируются и отправляются в функцию javascript, которая печатает больше данных в зависимости от того, что было передано.

Моя проблема в том, что всякий раз, когда я ссылаюсь на $_GET или $_POST<?php ?> тегов в функции JavaScript, я получаю сообщение об ошибке, сообщающее, что мои функции JavaScript не определены.Я знаю, что это работает частично , по крайней мере, потому что вызов AJAX действительно отправляется, когда я удаляю суперглобальный $_GET/$_POST.

Любая помощь с этим будет принята с благодарностью.

Вот мой код:

jQuery.noConflict();        

function printSubCategories(categories) {

    for (var i = 0; i < categories.length; i++) {

        var opt = document.createElement('option');

        opt.text = categories[i]['name'];
        opt.value = categories[i]['id'];

        jQuery('#subcategories').append(opt);
    }    
}

function recieveAndPrint() {
<?php
    $categories = getCategories(json_decode($_GET['parent']));
?>
    printSubCategories(<?=json_encode($categories)?>);
}

function ajaxCategories(pathToFile, ajaxData) {  
    jQuery.get(pathToFile, {'parent' : ajaxData}, function(ajaxData) {
        //alert('Data loaded: ' + ajaxData + <?=json_encode($_POST)?>);
    });

    recieveAndPrint();

}

1 Ответ

2 голосов
/ 26 ноября 2011

Я подозреваю, что вы не понимаете, как работает AJAX. Похоже, вы ожидаете, что вызов AJAX может работать с PHP, расположенным на той же странице, таким образом, что страница загружается только один раз. Это не точно; вам нужна еще одна php-страница, которая вызывается на сервере, который возвращает данные в виде JSON на исходную страницу. У вас также есть проблема с обратным вызовом, так как данные не будут готовы до вызова receiveAndPrint (); он должен быть вызван в обратном вызове (но в этот момент он будет print , поскольку приемная часть уже будет выполнена).

Допустим, у вас есть два PHP-файла, a.php и b.php. Первая будет использоваться для отображения начальной страницы, а вторая будет вызывать для получения новых данных для конкретного экземпляра parent.

a.php

jQuery.noConflict();        

function printSubCategories(categories) {

    for (var i = 0; i < categories.length; i++) {

        var opt = document.createElement('option');

        opt.text = categories[i]['name'];
        opt.value = categories[i]['id'];

        jQuery('#subcategories').append(opt);
    }    
}


function ajaxCategories(pathToFile, ajaxData) {  
    jQuery.get(pathToFile, {'parent' : ajaxData}, function(data) {
        printSubCategories(data);
    });
}

называется

ajaxCategories('/b.php','value_of_parent');

b.php

<?php
    $categories = getCategories(json_decode($_GET['parent']));
    header('Content-type: application/json');
?>
<?=json_encode($categories)?>

Вы также можете убедиться, что ответ не кэшируется.

header('Cache-Control: no-store');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...