Вызов сценариев PHP из Javascript, не покидая текущей страницы - PullRequest
5 голосов
/ 15 марта 2011

У меня возникают проблемы с вызовом PHP-скриптов из Javascript, не покидая текущей HTML-страницы (если это вообще возможно).Я понимаю, что это возможно с помощью AJAX, хотя возможно ли использование только Javascript?

Контекст: -

Я хочу, чтобы моя страница выполняла короткую анимацию с использованием Javascript (с помощью onclick), а затем немедленно вызывалPHP-скрипт для вставки данных в базу данных MySQL - и все это не покидает страницу, чтобы не препятствовать анимации.

Часть анимации, которую я могу сделать, и вставка данных в базу данных и т. д., но как это сделать?Я вызываю PHP-скрипт в конце этой анимационной функции Javascript?

Будем весьма благодарны за любые указатели, фрагменты кода и т. Д.!^ _ ^

Извиняюсь, если этот вопрос был задан ранее.

Ответы [ 7 ]

9 голосов
/ 15 марта 2011

AJAX - это асинхронный Javascript и XML, Это технология Javascript, которая позволяет отправлять запрос на сервер (как это делает ваш браузер при вводе URL) и получать ответ в виде строки javascript, а не отображать его на странице.

Проблема в том, что разные браузеры не поддерживают AJAX одинаково, поэтому я предлагаю использовать jQuery для абстракции.

сделать это с помощью jQuery:

<script>
$.get("backend.php",{param:value},callbackFunction);
callbackFunction(data)
{
alert(data);
}

</script>
2 голосов
/ 18 февраля 2014

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

<script type="text/javascript">
var myIntv;
function do_the_script() {
    // play animation ...
    var address='fancy_script.php';
    var tmp = new XMLHttpRequest();
    myIntv=setInterval(function(){
    tmp.addEventListener("load", doneHandler, false);
    tmp.open("POST", address);
    tmp.send(null);
    }, 1000);
}

function doneHandler(event) {
    // maybe do something when script is executed
    clearInterval(myIntv);
}
</script>

Как вы могли заметить, код, который «вызывает» адрес, выполняется каждую 1 секунду. Это делается для того, чтобы сделать вызов достаточно много раз, чтобы получить один положительный ответ, вызвать doneHandler и затем очистить интервал. Если вы считаете, что ваш сервер может реагировать быстрее или медленнее, вам следует соответствующим образом изменить эти миллисекунды.

1 голос
/ 15 марта 2011

PHP - это серверный язык.JavaScript - это язык на стороне клиента.

Если вы хотите выполнить код на стороне сервера, у вас нет возможности совершить двустороннее обращение к серверу.Если вы не хотите покидать страницу, ваш единственный вариант - выполнить асинхронный запрос (он же AJAX).

Использование библиотеки JavaScript, такой как jQuery или MooTools значительно упрощает такую ​​задачу.Например, вы можете использовать MooTools для выполнения запроса в конце вашего скрипта следующим образом:

var req = new Request({url: '/backend/doPHPInsert.php'});
req.send();

Существуют способы сделать это без AJAX, например, создавiFrame динамически (или любой другой элемент, который выбирает ресурс).

1 голос
/ 15 марта 2011

Вы можете использовать JQuery AJAX:

http://api.jquery.com/jQuery.ajax/

0 голосов
/ 03 мая 2013

Если вы не хотите включать библиотеку jquery, вы можете просто сделать следующее

a) и добавить iframe, размер 0px, чтобы он не был виден, href пусто

b)выполните это в вашей функции кода js

 window.frames['iframename'].location.replace('http://....your . php');

Это выполнит скрипт php, и вы можете, например, сделать обновление базы данных ...

0 голосов
/ 15 марта 2011

Вот несколько хороших примеров использования XMLHttpRequest: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest

(В частности, прокрутите вниз до асинхронных примеров - теперь вы готовите с газом.)

Редактировать: см. Также http://msdn.microsoft.com/en-us/library/ms535874%28v=vs.85%29.aspx, в котором приведены примеры работы с версиями IE, в которых нет нативных window.XMLHttpRequest.

Теперь, давайте будем откровенны - да, работать с самим XHR (особенно с кросс-браузерным режимом) довольно глупо. Вы можете использовать практически что угодно (jQuery, Dojo, MooTools, Prototype, Closure, YUI и т. Д.) Для более удобного выполнения XHR, поскольку всех из них, среди прочего , дать вам более краткие возможности XHR.

Все же хорошо знать, с чем вы работаете под поверхностью, прежде чем позволить библиотеке сделать это за вас. :)

0 голосов
/ 15 марта 2011

Я понимаю, что это возможно с помощью AJAX, хотя возможно ли использование только Javascript?

Если вы не хотите использовать XHR, вы можете использовать этот уродливый хак ...

var request = 'mysql-insert.php',
    image = new Image();

image.onload = function() {
  // Success
}

image.onerror = function() {
  // Error
}

image.src = request;

За исключением того, что он действительно использовался только до широкого использования AJAX (или необходимости сделать междоменный запрос).

Я бы просто использовал AJAX. jQuery предоставляет несколько отличных абстракций для работы с XHR.

...