>  기사  >  PHP 프레임워크  >  thinkphp에서 ajax 메소드를 사용하시나요?

thinkphp에서 ajax 메소드를 사용하시나요?

WBOY
WBOY원래의
2022-06-16 17:47:422739검색

thinkphp에서는 ajax 메소드가 사용됩니다. thinkphp는 PHP가 ajax를 사용하는 것과 같은 방식으로 ajax를 사용합니다. 차이점은 PHP의 ajax에 있는 URL은 페이지를 가리키는 반면 thinkphp의 URL은 작업 메소드를 가리켜야 한다는 것입니다. ajax를 사용하여 지정된 데이터를 반환하고 반환 데이터 유형을 수정할 수 있습니다.

thinkphp에서 ajax 메소드를 사용하시나요?

이 문서의 운영 환경: Windows 10 시스템, ThinkPHP 버전 5, Dell G3 컴퓨터.

thinkphp에서 ajax 메소드를 사용하시나요?

thinkphp에서 ajax 메소드를 사용하세요

thinkphp에서 ajax를 사용하는 것은 이전 ajax를 사용하는 것과 동일하지만 차이점은 이전 ajax의 url이 페이지를 가리키고, thinkphp의 url은 액션 메소드를 가리켜야 합니다.

1. thinkphp는 ajax를 사용하여 데이터를 반환합니다

1. 먼저 AdminControllerMainController.class.php

public function testajax()//ajax测试方法
    {
        $this->show();
    }

2에 해당 디스플레이 페이지 testajax.html을 작성합니다. AdminControllerMainController.class.php

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="__PUBLIC__/js/jquery-1.11.2.min.js"></script><!--jquery文件放在public/js里面。__PUBLIC__找到public目录-->
<title>无标题文档</title>
</head>
<body>
    <select id="nation"></select>
</body>
<script type="text/javascript">
        $.ajax({
            url:"__CONTROLLER__/ajaxchuli",//这里指向的就不再是页面了,而是一个方法。
            data:{},
            type:"POST",
            dataType:"JSON",
            success: function(data){
                //alert(data[0].code);//这里要用索引,使用eq读取不出来数据。
                var str="";
                for(a in data)
                {
                    str = str+"<option value=&#39;"+data[a].code+"&#39;>"+data[a].name+"</option>";
                }
                $("#nation").html(str);
            }
        })
</script>

4의 ajax 처리 방법입니다. 이런 식으로 데이터가 페이지에 표시됩니다

2. ajax에서 반환하는 데이터 유형을 수정합니다

thinkphp에서는 ajax가 JSON 데이터를 반환합니다. 기본적으로 DEFAULT_AJAX_RETURN을 구성하여 설정할 수 있습니다. 설정 방법은 다음과 같습니다

public function ajaxchuli()
    {
        $n = D("Nation");//造一个nation表的模型对象
        $attr = $n->select();
        
        $this->ajaxReturn($attr);//ajax返回数据的方式,用ajaxReturn。
    }

XML 모드인 경우 자동으로 XML 문자열로 인코딩되어 EVAL 모드인 경우 문자열 데이터 데이터만 출력됩니다.

예:

// 指定XML格式返回数据
$data[&#39;status&#39;] = 1;
$data[&#39;content&#39;] = &#39;content&#39;;
$this->ajaxReturn($data,&#39;xml&#39;);

동시에 ajax의 데이터 유형을 TEXT

public function ajaxchuli()
{
$this->ajaxReturn("hello","eval");//将返回数据的类型更改成字符串
}

3으로 변경해야 합니다. ajax 및 생성(자동 수집 양식)을 사용하여 데이터베이스에 데이터를 추가합니다

1. 접근 방법을 먼저 작성하세요

<script type="text/javascript">
        $.ajax({
            url:"__CONTROLLER__/ajaxchuli",//这里指向的就不再是页面了,而是一个方法。
            data:{},
            type:"POST",
            dataType:"TEXT",
            success: function(data){
                alert(data);//输出结果就是hello
            }
        })
</script>

2. 방문한 페이지를 작성하세요

public function addajax()
    {
        $this->show();
    }

3. ajax 처리 방법을 작성하세요

<body>
<div>代号:<input type="tel" id="code" /></div>
<div>名称:<input type="tel" id="name" /></div>
<div><input type="button" id="btn" value="添加" /></div>
</body>
<script type="text/javascript">
$("#btn").click(function(){
        var code = $("#code").val();
        var name = $("#name").val();
        $.ajax({
                url:"__CONTROLLER__/addchuli",
                data:{Code:code,Name:name},//要用create方法,这里的列名就要和数据库中的列名一样,这里的首字母要大写。
                type:"POST",
                dataType:"TEXT",
                success: function(data){
                    alert(data);
                }
            })
    })
</script>

4. thinkphp에서 페이징을 위해 ajax를 사용하세요. 주로 타사 클래스를 참조하는 방법에 주의하세요.

1. 먼저 xianshi();

public function addchuli()
    {
        $n = D("Nation");
        $n->create();//自动收集表单
        $r = $n->add();//调用添加的方法
        if($r)
        {
            $this->ajaxReturn("OK","eval");//如果添加成功输出“OK”,eval代表数据类型为字符串。
        }
        else
        {
            $this->ajaxReturn("NO","eval");//如果添加失败,就输出”NO“。
        }
    }

2. 표시 페이지를 만듭니다.

public function xianshi()
    {
        $n = D("chinastates");//造chinastates表的对象
        $shuliang = $n->count();//取出数据的总条数
        $page = new HomelibsPage($shuliang,15);//将page文件类引入。()里面需要参数,第一个参数是数据的总数量,第二个是每页显示多少条数据。所以上面要先求出数量。
        
        $xinxi = $page->fpage();        
        
        $attr = $n->limit($page->limit)->select();//查询出所有数据,limit(0,15),需要修改Page.class.php文件中的第57行$this->limit = "LIMIT ".$this->setLimit();,将 "LIMIT ".去掉,如果不去掉的话,将会显示limit(limit(0,15)),度了1个limit。
        $this->assign("shuju",$attr);//将查询出的数据都注入显示页面
        $this->assign("xinxi",$xinxi);
        $this->show();//调用显示方法在显示页面显示。
    }

3. Page.class.php

에서 변경해야 할 사항 (1) 파일 이름은 원래 페이지입니다. class.php를 클래스 이름과 일치하도록 Page.class.php로 변경합니다.

(2) Page.class.php를 thinkphpApplicationHomelibs에 복사합니다.

(3) 네임스페이스를 추가합니다.

(4) Page.class.php 파일 $this->limit = "LIMIT ".$this->setLimit()에서 57번째 줄을 수정하고 "LIMIT "를 제거합니다.

5. 의 문자열

1. 캡슐화된 메소드가 동일한 컨트롤러에 작성되었습니다

<body>
<table width="100%" border="1" cellpadding="0" cellspacing="0">
    <tr>
        <td>代号</td>
        <td>名称</td>
        <td>父级代号</td>
    </tr>
    <foreach name="shuju" item="v" >
     <tr>
        <td>{$v.areacode}</td>
        <td>{$v.areaname}</td>
        <td>{$v.parentareacode}</td>
    </tr>
    </foreach>
</table>
<div>{$xinxi}</div><!--显示分页信息-->
</body>

2. 캡슐화된 메소드가 동일한 컨트롤러에 없습니다

(1) Maincontroller.class.php 메소드에 다음만 작성합니다. (2) 다음 내용으로 thinkphpApplicationHome에 캡슐화된 함수 function.php를 작성합니다.

public function test()
    {
        $str = "volist标签通常用于查询数据集(select方法)的结果输出,通常模型的select方法返回的结果是一个二维数组,可以直接使用volist标签进行输出。在控制器中首先对模版赋值:";//给str一个字符串
        $m = A("Main");//造一个Main控制器的对象
        echo $m->ChangDu($str);//输出$str的长度
    }
    
    public function ChangDu($str)//ChangDu方法,输出字符串的长度。
    {
        return strlen($str);
    }

(3) 이것을 작성한 후 브라우저에 http://localhost/thinkphp/index.php/Home/Main을 입력합니다. /test는 읽을 수 없습니다. 문자열의 길이에 따라 구성 파일에 코드를 추가해야 합니다.

"LOAD_EXT_FILE"=>"functions",//함수 라이브러리 클래스를 자동으로 로드합니다

이 코드 다음에 문자열의 길이를 읽습니다.

6. 세션 존재 여부 자동 확인

1. 세션 목적 (1) 사용자 이름 및 기타 정보를 저장하는 데 사용됩니다.

(2) 로그인 건너뛰기를 방지합니다. 이전 방법에서는 각 페이지나 방법에서 세션이 존재하는지 확인해야 합니다.

(1) Fucontroller 클래스를 생성하여 세션이 존재하는지 확인합니다.

public function test()
    {
        $str = "volist标签通常用于查询数据集(select方法)的结果输出,通常模型的select方法返回的结果是一个二维数组,可以直接使用volist标签进行输出。在控制器中首先对模版赋值:";//给str一个字符串
        $m = A("Main");//造一个Main控制器的对象
        echo ChangDu($str);//输出$str的长度
    }

(2) 상속받은 상위 클래스는 Controller가 아닌 FuController라는 점에 유의하세요. 이 페이지를 처음 방문하시면 로그인 방법으로 넘어가게 되는데, 세션값이 없기 때문에 위의 $this->redirect("Home/Login/login",array(),5,'Please log in) ')가 실행됩니다. ;

<?php
function ChangDu($str)
{
    return strlen($str);
}
?>

(3) 로그인 방법을 작성합니다. 위의 테스트 메소드는 로그인 메소드로 점프한 후 세션을 저장한 후 테스트 메소드로 이동하면 세션 값으로 인해 테스트 메소드가 계속 실행됩니다.

<?php
namespace HomeController;
use ThinkController;
class FuController extends Controller//造一个FuController类,用来判断session值是否存在。
{
    public function __construct()//造一个构造函数
    {
        if(session(&#39;?uid&#39;))//判断session是否存在,如果存在,什么也不做。
        {
            
        }
        else//如果不存在
        {
            //$url = U("Home/Login/login");
            $this->redirect("Home/Login/login",array(),5,&#39;请登录&#39;);//第一个参数是跳转的地址,第二个参数是要传的值,第三个参数是跳转的时间,第四个参数是跳转时的提示信息。
            exit;
        }
    }
}
?>

추천 학습: "

PHP 비디오 튜토리얼

"

위 내용은 thinkphp에서 ajax 메소드를 사용하시나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.