2013-12-13 2 views
1

이것은 매우 간단합니다. class Mycontroller extends CI_Controller 이후ajax를 사용하여 codeigniter에서와 같이 PHP 함수를 호출하는 방법은 무엇입니까?

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

     }; 
     }) 

: codeigniter에서 내가 좋아하는 아약스 전화를 할 수 있습니다.
그래서 내가 할 수있는 방법을 나에게 이런 함수를 호출하는 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

당신이 전화하고 싶은거야 : 그것의 라우팅에 사용하는 것에 관한 CI 소스 (application/config/config.php)에서 posted.php의'test()'함수는? (내가 편집 한 것을 보면 알 수 있습니다.) – CWSpear

+0

@CWSpear 예 전 선생님입니다. – leonardeveloper

+1

글쎄, 주어진 URL을 해석하고 컨트롤러를 인스턴스화하고 그 기능을 호출하는 고유 한 프레임 워크를 작성해야합니다. @Milanzor의 방법이 당신의 어플리케이션에 충분하지 않다면 말입니다. – AmazingDreams

답변

6

당신은 이런 식으로 아약스 POST URL을 변경할 수 있습니다 :

switch($_GET['call']){ 

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


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

입니다. 설명 : HTTP 요청만으로는 함수를 호출 할 수 없습니다. PHP는 여전히 당신이하고 싶은 것을 결정할 필요가 있습니다. 이것이이 답변과 같은 핸들러를 필요로하는 이유입니다. 따라서이 코드를 수정하거나 직접 구현하십시오. – Daniel

+0

아니면 그냥 $ _GET [ 'call']() 할 수 있습니다. –

+0

@adirohan 그래, 사용자가 모든 기능을 사용할 수있게하려면 ... 아무도 원하지 않을 것입니다. – Daniel

1
:

posted.php?call=test 

다음, 당신의 posted.php에서 GET 매개 변수 올바른 기능을 '전화'와 전화를 확인

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}"); 

추가 정보 :

/* 
|-------------------------------------------------------------------------- 
| 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에 있습니다. 그 덤프의'/ posted.php/test'에 있습니까? 'PATH_INFO'는 그렇지 않으면 비어있을 것입니다. 실제로 AJAXing 콘텐츠의 문제를 해결하기위한 더 나은 솔루션이기 때문에 실제로 @ Milanzor의 솔루션을 사용하는 것이 더 나을 것입니다.하지만 CI가 수행하는 방법과 자신의 롤업 방법에 대한 구체적인 질문에 대답하려고했습니다. – CWSpear

관련 문제