передать объект из JS в PHP и обратно - PullRequest
0 голосов
/ 22 марта 2010

Это то, что я не думаю, что не может быть сделано, или не может быть сделано легко.

Подумайте об этом, у вас есть кнопка внутри div в HTML, когда вы нажимаете на нее, вы вызываете функцию php через AJAX, я хотел бы отправить элемент, который запускает событие click (или любой элемент в качестве параметра) в PHP и обратно в JS, таким же образом, как serialize () в PHP, чтобы иметь возможность восстановить элемент в JS.

Позвольте привести простой пример:

PHP:

function ajaxCall(element){
    return element;
}

JS:

callbackFunction(el){
    el.color='red';
}

HTML:

<div id="id_div">
<input type="button" value="click Me" onClick="ajaxCall(this, callbackFunction);" />
</div>

Так что я вещь в 3 методах

метод 1. Я могу дать каждому элементу на странице идентификатор. поэтому вызов Ajax будет выглядеть так:

ajaxCall(this.id, callbackFunction);

и функция обратного вызова будет:

document.getElementById(el).color='red';

Этот метод мне кажется сложным, поскольку на большой странице сложно отследить все идентификаторы.

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

метод 3. Измените мои функции AJAX, чтобы он сохранил элемент, который запустил событие, и передал его функции обратного вызова в качестве аргумента, когда что-то возвращается из PHP, поэтому в моем AJAX будет выглядеть так:

eval(callbackFunction(argumentsFromPhp, element));

и функция обратного вызова будет:

callbackFunction(someArgsFromPhp, el){
   el.color='red';
// parse someArgsFromPhp
}

Я думаю, что третий вариант - мой выбор, чтобы начать этот эксперимент.

Кто-нибудь из вас лучше знает, как мне это сделать?

Спасибо.

EDIT:

Предыдущий пример не сложен, на этот раз я попробую лучшее объяснение.

PHP:

function phpFunct($age){
   $text='';
   if(!is_numeric($age)){
      $t['alert'] = 'You filled an invalid age !';
      return $t;
   }
   // Can be lots of code ...
   $text.='Your age is '.$age;
   $t['#myDiv'] = $text;
   return $t;
}

JS:

function callback(x){
   for(i in x){
      if(i == 'alert'){
          // Alert if something went wrong.
          alert(x);
      } elseif(){
         // ... more options, promts, console.log's ...etc
      }else{
         // Simple innerHTML
         $(i).val(x);
      }
   }
}

phpFunct(){
   x_phpFunct($('#age').val(), callback); //call PHP function via AJAX
}

HTML:

<div id="myDiv">
<input type="text" id="age" /><br />
<input type="button" value="getSomethingFromPhp" onCLick="phpFunct();" />
</div>

Я хотел бы иметь возможность сделать что-то вроде этого: HTML:

onClick="phpFunct(this.parentNode);"

JS:

phpFunct(el){
   x_phpFunct(el, $('#age').val(), callback);
}

PHP:

phpFunct($el, $age){
    ...
    $t[$el] = 'Your age is '.$age;
    return $t;
}

Это можно сделать, если у вас есть идентификатор для каждого элемента, и передать этот идентификатор в PHP и обратно. Я знаю, что это не "законно", но теперь мой идентификатор не уникален. Я использую DIV как обертки и все, что внутри DIV имеют уникальные идентификаторы (это как использование DIV в качестве тела, много страниц, открытых одновременно, много тел). И если вы достигнете элемента, вы всегда будете знать, кто является родителем этого элемента.

1 Ответ

1 голос
/ 22 марта 2010

Многие библиотеки JavaScript используют форму # 1.Вы должны действительно проверить одну из многих хороших библиотек, которые существуют, чтобы начать: jQuery, prototype, mootools и т. Д. Эта проблема была решена прежде ..

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