Jump to content
  • 0

Не получается вызвать функцию (ajax)


Hoax
 Share

Question

Пересоздал тему для более легкого объяснения проблемы, которая до сих пор не решена. Задача банальная - вызвать функцию с помощью ajax при клике на кнопку.

 

В первом файле, который необходимо вызвать я указываю следующее :

// phpfunction a() {echo 'huu';}a(); // вызвали

Второй файл (где расположен ajax) вызывает открывает первый.

 

// ajax file<button onclick="go()" id="div">0</button><p id="text"></p><script>function go() {var client = new XMLHttpRequest();client.onreadystatechange = handler;client.open("GET", '1.php'); // открываем файл и получаем ф-ю с вызовомclient.send();}function handler() {if(this.status == 200 && this.responseText != null) {document.getElementById('text').innerHTML = this.responseText;}}</script>

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

 

Например так.

 

// ajax file<?phprequire_once '1.php';a();?><button onclick="go()" id="div">0</button><p id="text"></p>........

В данном случае при клике ничего не происходит...

Edited by Hoax
Link to comment
Share on other sites

16 answers to this question

Recommended Posts

  • 0

Вместо  require_once '1.php';

include '1.php';

Совет - возьмите для аякса Jquery, по мне так удобней

	function(){			$.ajax({  			url: "1.php",  			cache: false,  			success: function(){				alert('Эврика!')							}  		}); 	})

Вы маньяк ^_^ , однако..

Edited by Andryshok
Link to comment
Share on other sites

  • 0

Я чего то не поминанию. Вы подключаете 1.php, а потом вызываете ajax'ом функцию, которая обращается к 1.php (который уже подключен _once). Может быть дело в этом? Зачем включать 1.php, если вы его потом ajax'ом вызывать будете?

Link to comment
Share on other sites

  • 0

@jdk у него не работает потому что в третьем файле не подключен второй файл - тот который со скриптом аякса,  у него просто подключен до выполнения скрипта 1.php и голая кнопка c пустым кликом в третьем файле, а файла с js нет вообще, соответственно жамканье на кнопку ни к чему не приводит...... вроде так.. :huh:

4 утра а я работаю.... могу тупить если что :unsure:

Edited by Andryshok
Link to comment
Share on other sites

  • 0

У меня всего два файла, файл с php-функцией, и ajax-файл, который его получает.

 

Если сделать так

// file.phpecho $_GET['q'];
// ajax.php....xhr.open('GET', 'file.php?q=errg', true);...

- работает!

 

______________

 

Но если сделать так

// file.phpfunction f() { echo $_GET['q']; }
// ajax.php....xhr.open('GET', 'file.php?q=errg', true);...

- не работает

 

___________________________еще пример

 

Если сделать так

 

// file.phpfunction f() { echo $_GET['q']; }f();
// ajax.php....xhr.open('GET', 'file.php?q=errg', true);...

- работает.

 

Но если сделать так

// file.phpfunction f() { echo $_GET['q']; }
// ajax.php<?phpf();?>....xhr.open('GET', 'file.php?q=errg', true);...

или так

 

// ajax.php<?phpinclude 'file.php' // или require_once разницы в данном случае не играетf();?>....xhr.open('GET', 'file.php?q=errg', true);

- не работает

Edited by Hoax
Link to comment
Share on other sites

  • 0

 У вас:

// file.phpfunction f() { echo $_GET['q']; }
// ajax.php<?phpinclude 'file.php'f();?>

После include получается следующие:

function f() { echo $_GET['q']; }<?phpf();?>

Для того, чтобы работало, должно быть так:

// file.php<?phpfunction f() { echo $_GET['q']; }?>
// ajax.php<?phpinclude 'file.php'f();?>

После include получается следующие:

<?phpfunction f() { echo $_GET['q']; }?><?phpf();?>

                                                                                                                                                                                                                                                                                                                                                                            

 

 

 

function f() { echo $_GET['q']; }

 

Ну, так всё логично: в создали функцию, но не вызвали её. А как должно было быть?

Edited by afdw
Link to comment
Share on other sites

  • 0

Дело не начале кода с <?php, и его концом, я писал это только что, а не копировал из файла чтобы избежать кучи кода, само собой у меня имеется так

// file.php<?phpfunction f() { echo $_GET['q']; }?>
// ajax.php<?phpinclude 'file.php'f();?><script>... xhr.open()....</script>

Но даже в данном случае не работает, как я уже сообщал.

Т.е. в данном случает, php инклудит файл и вызывает функцию с ошибкой отсутствия $_GET['q'] (что естественно, параметр же будет передан только при клике).

 

А после клика ничего не происходит, т.е. ошибки нет, просто ничего не выводится

Edited by Hoax
Link to comment
Share on other sites

  • 0

Опишу более детально.

 

С помощью аякса мы получаем доступ к файлу, но зачастую, нас волнует не столько получаемый файл, а именно класс (или функция), который в нем находится, но вот проблема, в каком файле вызывать данную функцию. (чтобы все работало естественно)

 

Как видно из примеров которые я указал. У МЕНЯ скрипты работают только тогда, когда я вызываю нужную функцию "f()" в том файле, в котором она была написала.

 

Т.е.

// ---- file.phpfunction f() {// написали}f() // вызвали

И файле где у нас ajax, просто указали доступ к этом (file.php) файлу - тогда и именно тогда все получается, ф-я вызывается и ajax возвращает ее результат.

 

НО! Что если мне необходимо (с точки зрения работы приложения и просто для удобства) вызвать эту функцию f(), в другом файле? Вот тут становится проблема

Link to comment
Share on other sites

  • 0

 

Т.е. только так получится реализовать? Просто придется так каждый раз инклудить из файла в файл 

 

в другом файле?
 

Единственное место, где можно вызвать функцию - в том php скрипте, к которому вы обращаетесь по ajax.

Link to comment
Share on other sites

  • 0

Не нужно путать php и js. То, что ты проинклудил php-код в файл с html-кодом, который сделает аякс-запрос, вовсе не значит, что этот php-код где-то в этом файле будет доступен после того, как файл будет отдан клиенту. Когда плиент получил html, php там уже нет, и неизвестно, был ли он там и какие функции были подключены. Каждый аякс-запрос — это новый запрос, всё равно что браузером страницу открыли. Поэтому для проверки просто открывай свою ссылку браузером.

<?php

include 'file.php' // или require_once разницы в данном случае не играет

f();

?>

....

xhr.open('GET', 'file.php?q=errg', true);

Конечно не работает. Сперва выполняется php-код, параметра нет, поэтому он ничего не выводит. Потом клиент возможно делает запрос к file.php?q=errg, а в file.php только функция, которая никем не вызывается. Какие от неё ожидаются действия?
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy