> 백엔드 개발 > PHP 튜토리얼 > thinkphp의 Ajax 구현 원리

thinkphp의 Ajax 구현 원리

WBOY
풀어 주다: 2016-08-04 09:21:24
원래의
1146명이 탐색했습니다.

thinkphp 프레임워크 Ajax 배우기(방금 너무 게을러서 코드를 게시하지 못했기 때문에 응답자 모두에게 사과드립니다.)
내 생각은: 프런트 데스크에서 Ajax를 실행하는 것입니다. -->> ->> 데이터베이스에서 데이터 가져오기 -->> 데이터를 포그라운드 처리로 직접 반환
템플릿을 렌더링하지 않고 컨트롤러에서 직접 데이터를 반환하려면 어떻게 해야 합니까?
thinkphp의 Ajax 구현 원리

thinkphp의 Ajax 구현 원리

thinkphp의 Ajax 구현 원리

문제는 $this->ajaxReturn()이어야 합니다;
ajaxReturn()을 삭제하고 대신 var_dump($data)를 사용했습니다
프런트에서 받은 데이터는 다음과 같습니다
thinkphp의 Ajax 구현 원리

드디어 문제가 해결되었습니다. 발견된 내용이 json 형식이 아니었습니다. ajaxReturn()이 전송한 내용이 json 형식이 아니어서 프런트에서 받은 내용이 array([0]=>array()였습니다. {})), 따라서 $.parseJSON(data)을 사용하여 구문 분석할 수 없습니다.
데이터를 구문 분석하는 데 대신 $.each(data[0], function(i,n){})를 사용하세요
thinkphp의 Ajax 구현 원리

답글 내용:

thinkphp 프레임워크 Ajax 배우기(방금 너무 게을러서 코드를 게시하지 못했기 때문에 응답자 모두에게 사과드립니다.)
내 생각은: 프런트 데스크에서 Ajax를 실행하는 것입니다. -->> ->> 데이터베이스에서 데이터 가져오기 -->> 데이터를 포그라운드 처리로 직접 반환
템플릿을 렌더링하지 않고 컨트롤러에서 직접 데이터를 반환하려면 어떻게 해야 합니까?
thinkphp의 Ajax 구현 원리

thinkphp의 Ajax 구현 원리

thinkphp의 Ajax 구현 원리

문제는 $this->ajaxReturn()이어야 합니다;
ajaxReturn()을 삭제하고 대신 var_dump($data)를 사용했습니다
프런트에서 받은 데이터는 다음과 같습니다
thinkphp의 Ajax 구현 원리

드디어 문제가 해결되었습니다. 발견된 내용이 json 형식이 아니었습니다. ajaxReturn()이 전송한 내용이 json 형식이 아니어서 프런트에서 받은 내용이 array([0]=>array( {})), 따라서 $.parseJSON(data)을 사용하여 구문 분석할 수 없습니다.
데이터를 구문 분석하는 데 대신 $.each(data[0], function(i,n){})를 사용하세요
thinkphp의 Ajax 구현 원리

Ajax가 데이터를 얻기 위해 백그라운드에 요청한 다음 프런트엔드 템플릿 엔진을 통해 이를 프런트엔드로 렌더링한다는 것이 무슨 뜻인지 잘 모르겠습니다. "? , 데이터를 반환하려면 템플릿 엔진이 여전히 필요합니까? 템플릿 엔진을 사용하면 문자열 연결을 방지하고 ajax에서 반환된 데이터를 더 잘 처리할 수 있습니다. Ajax 요청 데이터는 프로젝트에서 자주 사용되기 때문에 제가 사용하는 방식과 같이 메소드를 직접 캡슐화할 수 있습니다.

<code>protected $msg;

 //返回数据失败
 protected function fail($mode=false,$type="json"){
    $this->msg['status'] = 'failure';
    if(true===$mode){
      $this->reply($type);
    }
  }
//返回数据成功
protected function succeed($mode=false,$type="json"){
    $this->msg['status'] = 'success';
    if(true===$mode){
      $this->reply($type);
    }
  }
//返回的数据
protected function setResult($result){
    $this->msg['result'] = $result;
  }
protected function reply($type="json"){
    if($type == 'string'){
      print_r($this->msg);
    }else{
      echo json_encode($this->msg);
    }
    exit;
  }</code>
로그인 후 복사

사용법:
1. 요청 성공:
$this->setResult($data);
$this->succeed(true)
요청 실패:
$this->setResult("Request failed") //
$this->fail(true)

라고 쓸 필요는 없습니다.

js의 Ajax 요청:

<code>$.post('',$data).done(function(rs){
        var rs = $.parseJSON(rs);
        if(rs.status == 'success') {
          var msg = rs.result;   //获取数据
         
        } else {
          //请求失败的处理
        }
      });</code>
로그인 후 복사

$this->ajaxReturn($data);

예전에는
$this->assian('data', $data);
$this->display();

였습니다.

지금은
$this->ajaxReturn($data);

나쁘지 않아요! 배웠다!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿