2010-10-19 5 views
5

Я считаю, что можно выполнить функцию скрипта java в PHP, но останется ли она на стороне сервера, а не на стороне клиента? Могу ли я, в PHP, вызвать функцию .js, передав ему некоторые аргументы и вернуть его к PHP, который его назвал?Выполнение javascript в PHP

Скрипт Я хочу использовать возвращает XML, и я хочу, чтобы пользователь вводит с помощью PHP, передать их на .js функционировать , проживающих на сервере, а затем принять возвращенную XML и разобрать его обратно в PHP часть.

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

Спасибо за любую информацию!

+0

Короткий ответ - нет. Я думаю, вам может понадобиться немного изменить дизайн вашего приложения. Не могли бы вы реализовать функцию, которая возвращает XML в PHP (или есть эквивалент PHP, который выполняет то, что делает JS)? –

+0

У PHP нет Javascript-интерпретатора. [На стороне сервера Javascript] (http://en.wikipedia.org/wiki/Server-side_JavaScript) существует, но разве было бы проще просто переопределить JS-функцию в вашем PHP-коде? –

+0

Javascript является третьей стороной. Хотелось бы иметь версию PHP. – Robolulz

ответ

13

Вы не можете вызвать JavaScript из самого PHP. PHP не является механизмом JavaScript.

Однако есть расширение PECL для взаимодействия с V8:

И вы можете взаимодействовать с (ServerSide) JavaScript двигателя. Посмотрите на node.js и

+0

Выглядит интересно. Я посмотрю. Благодарю. – Robolulz

+0

У меня есть приложение для поиска файлов, работающее на моем сервере хранения, и оно имеет интерфейс Javascript. Веб-интерфейс для сервера в настоящее время является PHP, как и должно быть. Я просто хотел включить функцию поиска в веб-интерфейс. – Robolulz

+0

@ Robolulz через веб-интерфейс вы подразумеваете часть, которая запускается в браузере? Если да, то почему вы не вызываете JS-интерфейс сервера хранения непосредственно из браузера, а не из PHP? Кроме того, это сервер хранения, случайно, CouchDB или другая база данных NoSQL? – Gordon

2

Вы могли бы, если вы нашли на стороне сервера интерпретатора Javascript, что вы могли бы окликнуть. Я не использовал PHPJS (http://phpjs.berlios.de/), но он может работать.

Похоже, ваша лучшая ставка заключается в замене кода js, потому что то, что вы делаете, просто звучит как плохая идея.

0

Это действительно не так сложно, как вы делаете это.

  1. Страница издается с PHP/HTML.
  2. Пользователь вводит информацию в поля формы.
  3. Используйте функцию Jquery Serialize, чтобы получить данные в формате (javascript var), который вы можете передать.
  4. Проведите сериализованные данные на свой Javascript, чтобы получить желаемый XML
  5. Отправить Вернуть результаты XML в PHP через AJAX.
  6. PHP принимает XML, отправленный как POST из JQuery и делает свою магию.

FYI, существует относительно малоизвестное решение для AJAX через PHP, называемое XAJAX. Вероятно, это не поможет вам в этом случае слишком много, но это позволяет вам делать вызовы AJAX для функций PHP. Хотя верно, что PHP не имеет javascript-интерпретатора, XAJAX и JQuery Ajax - отличные способы взаимодействия внешнего интерфейса с функциональностью на стороне сервера.

1

Я думаю, что bpeterson прибил его. Но если вам неудобно с AJAX, или просто нужно немного больше деталей.

Первый - подайте действие на кнопку (отправьте форму или иначе). действие = "JavaScript: yourJsFunc()". Этот элемент, вероятно, будет отображаться через эхо на вашем PHP или просто написан статически.

Дальше - получите необходимые параметры. Я бы предложил методы jQuery или DOM, т.е. $ ('# blah') или document.getElementById ('blah'). val();

Затем - установите скрытые входы, чтобы сохранить ответ, принудительно отправить или выполнить запрос ajax. Вы находитесь на PHP с вашими ценностями!

function yourJsFunc() 
{ 
    var arg1 = $('#arg1').val //or equivalent DOM method 
    var arg2... 
    //serialize these if necessary 
    var yourXML = outsideJSFunction(arg1, arg2, etc); 

    $('#invisibleDiv').html('<form id="yourForm" method="POST"><input type="hidden" name="x" val="'+yourXML+'" /></form>'); 
    $('#yourForm').submit(); 
     //ALTERNATIVELY $.get("other.php", {myXml : yourXml}, function() {//whatever}); 
} 
Смежные вопросы