2010-06-17 2 views
1

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

$(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'} -> есть переключатель заявление на стороне PHP

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

«Эти функции являются вызовы на мыльный сервер "< - не имеет значения.

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

Как избавиться от оператора switch? ? Как я могу правильно вызвать php-функции и передать params? Как я могу сохранить эти идентификаторы, поэтому, когда я нажимаю на элемент с этим идентификатором, вызывается другая функция 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-связь, но моя проблема - это материал данных, , когда я нажимаю на узел, идентификатор не определен ... он печатается, но когда я нажимаю на него, oupsss .. так что проблема в том, как я могу правильно прикрепить идентификатор для каждого соответствующего

..

.

ответ

0

Одним из решений для управления идентификаторами будет кодирование ваших данных как 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. Затем вам нужно будет написать код для правильного сохранения этих идентификаторов и имен. Затем они могут быть использованы позже (т. Е. При нажатии кнопки и т. Д.).

EDIT: Я обновил код, указанный выше. Данные JSON теперь связаны с элементом HTML «# div1», поэтому вы можете вернуться к нему в будущем. Я также добавил простое событие click. Всякий раз, когда элемент кликается, отображается его идентификатор.

+0

Tnx, что я искал, i еще не пробовал, но я думаю, что это сработает. Как я могу сохранить данные json? Когда функция заканчивается успешно, они собирают мусор? я надеялся, что они окажутся ... Я где-то слышал, что могу попытаться добавить идентификаторы из функций php в соответствующий элемент html, который они эхо, поэтому я могу выбрать их и прочитать их оттуда .... Что вы делаете? думать?? это выполнимо ?? Мне кажется, что я очень ниндзя. :) tnx снова. – Xaris

+0

Привет, Xaris. Я обновил свой ответ выше. Теперь он сохраняет данные JSON в HTML-элемент. Это позволяет вам снова читать данные в будущем. Я также добавил некоторый простой код, который отображает ID, когда вы нажимаете на элемент HTML. Надеюсь, это приблизительное руководство, чтобы вы начали. =) – Wireblue

+0

У меня возникли проблемы с сохранением идентификатора элементов, ознакомьтесь с моим редактированием .. tnx за вашу помощь. – Xaris

1

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

Вы можете POST параметры вместе с каждым запросом AJAX.

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

+0

Tnx вы очень для своего времени. Этот проект будет размещен на сайте joomla, поэтому MVCing это doto ... :) Я просто надеялся, что существует способ указать функцию в данных: – Xaris