2010-10-19 18 views
5

Wierzę, że możliwe jest wykonywanie funkcji skryptu java w PHP, ale czy pozostanie ona po stronie serwera, a nie po stronie klienta? Czy w ramach PHP mogę wywoływać funkcję .js, przekazując kilka argumentów i zwracając ją do PHP, który ją nazwał?Wykonywanie javascript w PHP

Skrypt, który chcę użyć zwraca XML, i chcę uzyskać dane wejściowe użytkownika za pomocą PHP, przekazać je do funkcji .js rezydującej na serwerze, a następnie wziąć zwrócony xml i przeanalizować go ponownie w PHP część.

Pytam, bo widzę, że ludzie komentują to, ponieważ .js jest stroną klienta, a PHP jest stroną serwera, nie dogadują się. Miałem nadzieję, że wykonując funkcję .js w PHP, mogę sfałszować wywołanie .js jako pochodzące z lokalnego komputera (serwera).

Dzięki za wszelkie informacje!

+0

Krótka odpowiedź brzmi: nie. Myślę, że może być konieczna zmiana projektu aplikacji. Czy mógłbyś zaimplementować funkcję zwracającą XML w PHP (lub czy istnieje odpowiednik PHP, który spełnia to, co robi JS)? –

+0

PHP nie ma interpretera Javascript. [JavaScript po stronie serwera] (http://en.wikipedia.org/wiki/Server-side_JavaScript) istnieje, ale czy nie byłoby łatwiej po prostu ponownie zaimplementować funkcję JS w swoim kodzie PHP? –

+0

JavaScript jest stroną trzecią. Szkoda, że ​​nie było wersji PHP. – Robolulz

Odpowiedz

13

Nie można wywołać kodu JavaScript z poziomu samego PHP. PHP nie jest silnikiem JavaScript.

Jednak nie jest to rozszerzenie PECL na współpracę z V8:

I można współpracować z (serverside) JavaScript silnika. Wystarczy popatrzeć na node.js i

+0

Wygląda interesująco. Zamierzam rzucić okiem. Dzięki. – Robolulz

+0

Co mam, to aplikacja do wyszukiwania plików uruchomiona dla mojego serwera pamięci masowej i ma interfejs JavaScript. Front-end dla serwera to obecnie PHP, tak jak powinno być. Chciałem tylko włączyć możliwości wyszukiwania do interfejsu sieciowego. – Robolulz

+0

@Robolulz przez koniec strony internetowej oznacza część, która jest uruchamiana w przeglądarce? Jeśli tak, dlaczego nie wywołasz interfejsu JS serwera pamięci masowej bezpośrednio z przeglądarki zamiast z PHP? Poza tym, czy serwer pamięci to przypadkiem CouchDB lub inny DB NoSQL? – Gordon

2

Można było gdybyś znalazł stronie serwera JavaScript tłumacza, że ​​można zawołać. Nie używałem PHPJS (http://phpjs.berlios.de/), ale może działać.

Wygląda na to, że lepiej jest zastąpić kod js, ponieważ to, co robisz, brzmi jak zły pomysł.

0

To naprawdę nie jest tak trudne, jak się wydaje.

  1. Strona jest renderowana początkowo z PHP/HTML.
  2. Użytkownik wprowadza informacje do pól formularzy.
  3. Użyj funkcji szeregowania Jquery, aby uzyskać dane do formatu (javascript var), który można przekazać.
  4. Przekaż dane serializowane do swojej Javascript, aby uzyskać żądany XML
  5. Prześlij wyniki XML zwrotne do PHP za pośrednictwem AJAX.
  6. PHP pobiera XML przesłany jako POST z Jquery i robi to magicznie.

FYI, istnieje stosunkowo mało znane rozwiązanie dla AJAX poprzez PHP o nazwie XAJAX. Prawdopodobnie nie pomoże ci to zbytnio w tej sytuacji, ale pozwala na wykonywanie wywołań AJAX na funkcjach PHP. Chociaż prawdą jest, że PHP nie ma interpretera javascript, XAJAX i Ajax Jquery'ego są znakomitymi sposobami na to, aby kod frontowy wchodził w interakcję z funkcjonalnością po stronie serwera.

1

Myślę, że bpeterson go zabił. Ale jeśli nie lubisz AJAX-a lub potrzebujesz trochę więcej szczegółów.

Po pierwsze - Umieść akcję na przycisku (formularz przesłać lub w inny sposób). action = "javascript: yourJsFunc()". Ten element prawdopodobnie jest renderowany za pomocą echa w twoim PHP lub po prostu zapisany statycznie.

Dalej - Uzyskaj potrzebne parametry. Sugerowałbym metody jQuery lub DOM, tj. $ ('# blah') lub document.getElementById ('blah'). val();

Następnie - Ustaw ukryte dane wejściowe do przechowywania odpowiedzi, wymuś przesłanie lub wykonaj żądanie ajax. Jesteś w PHP ze swoimi wartościami!

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}); 
} 
Powiązane problemy