2013-12-13 5 views
1

Это очень просто. В codeigniter я могу иметь АЯКС вызов, как:Как вызвать php-функцию, например, в codeigniter с помощью ajax?

$.ajax({ 
     type: "POST", 
     url: base_url + "index.php/mycontroller/myfunction" 
     //so in mycontroller.php^there is function myfunction() 
     data:{id : id}, 
     success:function(data){ 

     }; 
     }) 

Так как class Mycontroller extends CI_Controller.
Так как я могу это сделать в raw PHP, если у меня есть posted.php, как я могу продлить этот файл для того, чтобы меня вызвать функцию следующим образом:

<?php 
     function test(){ 
      echo 'Hello World!'; 
     } 

Что я имею в виду, как это:

$.ajax({ 
     type: "POST", 
     url: "posted.php/test", //go to posted.php and call test function if possible 
     data:{id : id}, 
     success:function(data){ 

     }; 
     }) 

Но этот не работает. Так любая помощь?

+0

Вы желающему звонить функция 'test()' в post.php? (Я вижу по твоему правлению, что ты делаешь.) – CWSpear

+0

@CWSpear Да, я сэр – leonardeveloper

+1

Ну, вам нужно написать свою собственную фреймворк, которая интерпретирует данный URL и создает экземпляр контроллера и вызывает эту функцию. Если метод @Milanzor ниже «достаточно» для вашего приложения. – AmazingDreams

ответ

6

Вы можете изменить свою Ajax POST URL на что-то вроде этого:

posted.php?call=test 

затем, в вашем posted.php, проверьте параметр GET 'Вызов' и вызов правильной функции:

switch($_GET['call']){ 

    case 'test': 
    test(); 
    break; 
} 


function test() { 
    echo "Hello, world!"; 
} 
+0

. Объяснение: Вы не можете вызывать функции только по HTTP-запросу. PHP по-прежнему необходимо определить, что вы хотите сделать. Вот почему для этого требуются обработчики, подобные этому ответу. Так что либо адаптируйте этот код, либо реализуйте свой собственный. – Daniel

+0

Или вы можете просто сделать, $ _GET ['call'](). –

+0

@adirohan Да, если вы хотите, чтобы ваш пользователь мог вызвать все доступные функции ... Кого никто бы не хотел. – Daniel

1

CodeIgniter использует некоторые переменные $_SERVER, чтобы иметь возможность получить эту информацию для вас. Фактически это может варьироваться от среды к среде, но обычно оно находится в $_SERVER['PATH_INFO'] (некоторые среды даже не поддерживают это, а CI имеет резервную функцию для использования параметров запроса).

Попробуйте print_r($_SERVER);, чтобы узнать, есть ли у вас переменная PATH_INFO. Оттуда CI может использовать строковое значение, чтобы определить имя функции и вызвать ее.

Вот простой пример:

function test() 
{ 
    echo 'Test success!'; 
} 

$fn = trim(@$_SERVER['PATH_INFO'], '/'); 

if (function_exists($fn)) call_user_func($fn); 
else die ("No function: {$fn}"); 

Дополнительная информация: От источника CI (application/config/config.php) относительно того, что он использует для его маршрутизации:

/* 
|-------------------------------------------------------------------------- 
| URI PROTOCOL 
|-------------------------------------------------------------------------- 
| 
| This item determines which server global should be used to retrieve the 
| URI string. The default setting of 'AUTO' works for most servers. 
| If your links do not seem to work, try one of the other delicious flavors: 
| 
| 'AUTO'   Default - auto detects 
| 'PATH_INFO'  Uses the PATH_INFO 
| 'QUERY_STRING' Uses the QUERY_STRING 
| 'REQUEST_URI'  Uses the REQUEST_URI 
| 'ORIG_PATH_INFO' Uses the ORIG_PATH_INFO 
| 
*/ 
+0

Посмотрите здесь, сэр. http://codejaw.com/33jaq – leonardeveloper

+0

Ах, вы в Windows. Вы на '/ published.php/test' в этом дампе? 'PATH_INFO' вообще не появится, если он будет пустым. На самом деле, на самом деле, вы, вероятно, лучше с решением @ Milanzor, так как это лучшее решение для решения проблемы содержимого AJAXing, но я пытался ответить на ваш конкретный вопрос о том, как CI это делает и как вы можете сворачивать свои собственные. – CWSpear

Смежные вопросы