Функция JQuery to PHP и обратно Ajaxed - PullRequest
1 голос
/ 17 июня 2010

У меня есть набор функций php, которые я хочу вызывать для различных событий, в основном, по щелчку с помощью jquery async (ajax).Первая функция вызывается при загрузке

$(document).ready(function()
{
  $("#div2").hide('slow');
  $("#div1").empty().html('<img src="ajax-loader.gif" />');
  $.ajax(
{
    type: "POST",
    url: "WebFunctions.php",
    data: {'func':'1'},
    success: function(html)
    {
      $("#div1").show('slow').html(html)
    }
});

Данные: {'func': '1'} -> это оператор switch на стороне php

switch($_POST['func'])
{
  case '1':
    getParents();
    break;
  case '2':
    getChilds(params);
    break;
  case '3':
    getChildObjects(params);
    break;
  default:
}

"Thisфункции - это вызовы мыльного сервера "<- не имеет значения. </p>

Так что когда эта функция завершается, я получаю массив, который содержит идентификаторы и имена.Я повторяю имена, но мне нужен идентификатор для справки, поэтому, когда я нажимаю на отображаемое имя, я могу вызвать другую функцию php с параметром ID имени ...

Как избавиться от переключателязаявление??Как правильно вызвать функции php и передать в него параметры ???Как я могу сохранить эти идентификаторы, чтобы, когда я нажимал на элемент с таким идентификатором, вызывалась другая функция php ??

Плз, не стесняйтесь задавать любые вопросы, любой ответ приветствуется:)

`` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `EDIT````````````````````` `` `` `` `` `` `` `` `` `` `` `

$(document).ready(function()
    {
        $("#div2").hide('slow');
        $("#div1").empty().html('<img src="ajax-loader.gif" />');
        $.ajax(
        {
            type: 'post',
            async: true,
            url: "Parents.php",
            data: {'id' : 12200},
            dataType: "json",
            cache: false,
            success: function(json_data)
            {
                $("#div1").empty();
                $.each(json_data, function(key, value)
                {
                    $("#div1").append('<p class="node"><b>['+key+']</b> => '+value+'</p>');
                    $(this).data('id', key);
                });
            }
        });
        $("p.node").click(function()
        {
            var id = $(this).data('id');
            alert('The ID is: ' + id);
        });
    });

У меня работает json коммуникация, но моя проблема с данными, когда я нажимаю надля узла идентификатор не определен ... он печатается, но когда я нажимаю на него, выше ... так что проблема в том, как правильно прикрепить идентификатор к каждому соответствующему

..

.

Ответы [ 2 ]

1 голос
/ 17 июня 2010

Вы можете избежать оператора switch, используя инфраструктуру MVC, которая направляет ваш запрос на соответствующую функцию. Например, используя CodeIgniter REST Server , у вас могут быть следующие URL-адреса для ваших функций:

Затем вы можете отправить параметры вместе с каждым запросом AJAX.

Возможно, вы также захотите вернуть идентификатор, который вы передаете как часть ответа, поэтому он будет доступен, когда вы сделаете запрос на следующую функцию.

0 голосов
/ 17 июня 2010

Одним из решений для управления вашими идентификаторами будет закодировать ваши данные как JSON . Это позволит вам передать весь массив PHP в Javascript, и он будет по-настоящему понимать и читать идентификаторы и имена.

Чтобы закодировать ваш массив PHP как JSON, попробуйте следующее:

echo json_encode($my_array);

(для работы вам потребуется PHP 5.2+)

Это распечатает данные JSON при запросе страницы. Затем в вашем JavaScript добавьте аргумент «dataType» к вашему вызову функции Ajax. Примерно так:

// Get JSON Data and Save
$.ajax({
    type: "POST",
    url: "WebFunctions.php",
    data: {'func':'1'},
    dataType: "json",
    success: function(json_data)    {
        $("#div1").data(json_data);
    }
});

// Display the ID when clicked
$("#div1").click(function(){    
    var id = $(this).data('id');
    alert('The ID is: ' + id);
});

Это говорит Ajax-функции ожидать JSON назад.

Когда вызывается функция успеха, вы можете получить доступ к переменной "json_data" и найти все идентификаторы и имена так же, как они были в PHP. Затем вам нужно написать некоторый код, чтобы соответствующим образом сохранить эти идентификаторы и имена. Затем они могут быть использованы позже (т.е. когда вы нажимаете на кнопку и т. Д.).

РЕДАКТИРОВАТЬ : я обновил код выше. Данные JSON теперь связаны с элементом HTML "# div1", поэтому вы можете вернуться к нему в будущем. Я также добавил простое событие клика. При каждом щелчке элемента отображается его идентификатор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...