>  기사  >  백엔드 개발  >  vue의 axios 구성 요소와 PHP 백엔드가 데이터를 교환하도록 하는 방법

vue의 axios 구성 요소와 PHP 백엔드가 데이터를 교환하도록 하는 방법

不言
不言원래의
2018-07-10 15:34:462630검색

이 글은 주로 vue의 axios 컴포넌트와 PHP 백엔드 사이의 데이터 교환 방법을 소개합니다. 이제 필요한 친구들이 참고할 수 있도록 공유하겠습니다.

1. 머리말

axios vue 프로젝트 Ajax 기술을 사용하여 백엔드와 데이터를 교환하는 데 사용되는 컴포넌트입니다. Vue 작성자의 추천으로 상당수의 Vue 프런트엔드 개발자가 사용하기 시작했습니다. 그러나 실제 개발 과정에서는 프론트엔드에서 게시한 데이터를 백엔드에서 수신하지 못하는 경우가 가끔 발생합니다. PHP 언어 개발 배경을 예로 들면, PHP의 기본 사전 정의 변수 $_POST를 수신할 수 없습니다(파싱 실패 때문에). 이 문서의 목적은 프런트엔드 및 백엔드 데이터 상호 작용을 살펴보고 참조할 수 있는 다양한 솔루션을 제공하는 것입니다.

2. 현재 $_POST

Form Data
에서 허용하는 데이터 형식은 id:1과 같은 키-값 쌍입니다. , 다음은

role-name:ta
role-desc:xxxxxxxxx
id:2
cloud[cla]:001
cloud[cla_baijia]:001
cloud[cla_gongkai]:001
local[soft5]:001
local[soft6]:001
mgmt[mgmt-clouditems]:01

PHP 서버에서 받은 데이터가 실제로는 이런 모습입니다

role-name=ta&role-desc=xxxxxxxxx&id=2&cloud%5Bcla%5D=001&cloud%5Bcla_baijia%5D=001&cloud%5Bcla_gongkai%5D=001&local%5Bsoft-5%5D=001&local%5Bsoft-6%5D=001&mgmt%5Bmgmt-clouditems%5D=01

유난히 URL의 매개변수와 유사한가요?
이 키-값 쌍 데이터를 QueryString이라고 합니다. 브라우저의 기본 양식이 이 데이터를 보낼 때 요청 헤더를 application/x-www-form-urlencoded로 설정합니다.
QueryString은 PHP의 $_POST

클래식 프런트 엔드 라이브러리에 있는 jQuery ajax의 serialize() 메서드와 param() 메서드로 성공적으로 구문 분석할 수 있습니다. jQuery는 데이터를 QueryString으로 변환하는 솔루션입니다. JSON 데이터를 변환합니다.
그리고 jQuery의 ajax 요청은 들어오는 데이터의 형식을 결정하고 param() 메서드를 암시적으로 호출하여 json 데이터를 변환하므로 사용자는 데이터를 백그라운드에 성공적으로 제출하기 위해 json 데이터를 직접 제공하기만 하면 됩니다. 명시적으로(param() 메서드를 수동으로 호출할 기회가 많지 않습니다. 기본적으로 jq가 보내는 요청 헤더도 application/x-www-form-urlencoded입니다. 대부분의 경우 사용자가 수동으로 설정할 필요가 없습니다.

Axios로 돌아가면, 기본적으로 axios가 보내는 요청 헤더는 application/json입니다. 간단히 말하면 기본적으로 json을 백엔드로 전달하고 QueryString으로 변환하지 않습니다.

3. 솔루션

1. 프론트엔드는 데이터를 QueryString

으로 변환하고 stringify 메소드를 호출합니다.

<template>
  <p>
      <input type="button" name="login" value="数据提交" @click="post">
  </p>
</template>

<script>
import axios from "axios"
import qs from "qs"
var json={
              "role-name": "ta",
              "role-desc": "xxxxxxxxx",
              "id": 2,
              "cloud": {
                "cla": "001",
                "cla_baijia": "001",
                "cla_gongkai": "001"
              },
              "local": {
                "soft-5": "001",
                "soft-6": "001"
              },
              "mgmt": {
                "mgmt-clouditems": "01"
              }
    };

export default {
    methods:{
        post(){
            axios.post("http://localhost/web/index.php/admin/login/login",json,{
                //配置`transformRequest` ,在向服务器发送前,修改请求数据,axios会根据修改后的数据,自动设置请求头
                transformRequest:[function(data){
                    return qs.stringify(data);//把数据转化为QueryString
                }]
            }).then(res=>{
                console.log(res);
            })
        }
    }
}
</script>

2. PHP 백엔드는 php://input을 사용하여 원본 데이터를 얻습니다.

프런트엔드에는 변경이 이루어지지 않습니다. 이 경우 미리 정의된 변수 $_POST를 구문 분석할 수 없기 때문에 PHP 백엔드는 php://input을 사용하여 원본 데이터를 가져온 다음 원하는 데이터로 변환할 수 있습니다. 형태.
PHP 백엔드가 기본 개발을 사용하는 경우 각 요청의 데이터를 처리하는 기능을 사용자 정의할 수 있습니다.
특정 프레임워크를 사용하여 PHP 백엔드를 개발하는 경우 프레임워크 자체가 php://input 처리를 지원하는지 여부에 따라 다릅니다. 간단한 테스트 방법은 소스 코드 전체 텍스트에서 php://input을 검색하는 것입니다. 프레임워크를 찾을 수 있으면 지원됨이고, 그렇지 않으면 지원되지 않으며 관련 처리 코드를 직접 확장해야 합니다.

PHP 프레임워크 yii2.0을 예로 들어, Vendor 디렉터리를 전문으로 검색해 보면 yiisoft->yii2->web->Request.php의 494번째 줄에 관련 처리 코드가 있는 것을 확인할 수 있습니다. .
실제 사용시에는 web.php 구성 파일에서만 구성하면 됩니다

    'components' => [
        'request' => [
            'parsers' => [
                'application/json' => 'yii\web\JsonParser'
            ],
            // 其他配置
        ],
        //其他组件配置
    ]

위는 프론트 엔드 처리와 백엔드 처리의 두 가지 솔루션이며 실제 상황에 따라 선택할 수 있습니다

위는 이 글의 전체 내용이 모든 분들의 학습에 도움이 되기를 바랍니다. 더 많은 관련 내용을 보시려면 PHP 중국어 홈페이지를 주목해주세요!

관련 권장 사항:

yii 데이터베이스에 대한 긴 연결을 설정하는 방법

위 내용은 vue의 axios 구성 요소와 PHP 백엔드가 데이터를 교환하도록 하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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