今天我爱编程网小编整理了php框架vue调用接口 前端vue与后端Thinkphp在服务器的部署相关信息,希望在这方面能够更好帮助到大家。
用vue访问接口能正常返回数据,但是报500错误,用postman提交一样的参数请求也正常,这是为什么呢?
我的也是用POSTman可以获取数据,我这边用axios去获取,加了application/x-www-form-urlencoded也是传不过来数据,一直报500,说是XMLhttp请求不对,困扰了好几天了,一直在想有没有人专写一个接口组件,可以接受各种类型的接口,每次还要去针对的写,太麻烦.什么form-data,x-www-form-urlencoded
我爱编程网
前端vue与后端Thinkphp在服务器的部署
vue在服务端部署时,我们都知道通过npm run build 指令打包好的dist文件,通过http指定是可以直接浏览的,Thinkphp通过域名指向index.php文件才可以浏览。要使前端正常调用后端数据,有两种方法:1、前端跨域调用后端数据,2、前端打包文件部署在后端的服务器文件夹下(同域)。
web服务器: apache
一、跨域
在服务器配置站点:
在路径/home/www/ 下创建test项目文件夹,用来放项目文件。
找到httpd-vhosts.conf文件配置站点
前端站点:
ServerName test.test.com
DocumentRoot "/home/www/test/dist"
DirectoryIndex index.html
后端站点:
ServerName test.testphp.com
DocumentRoot "/home/www/test/php"
DirectoryIndex index.php
将前端打包好的dist文件放在/home/www/test/ 文件夹下,运行
可浏览,当路径改变时,刷新会出现404错误。此时dist文件下创建一个.htaccess文件,当路径不存在时,路径指向
/index.html能解决此问题。
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
在/home/www/test文件夹下创建项目根目录php文件夹,将thinkphp文件放在php下。TP5的入口文件在public文件下,在这将public下的入口文件index.php挪到php文件夹下(个人习惯将入口文件放在项目根目录), 后端绑定Index模块。
前端调用后端接口,存在跨域,跨域解决方法有好几种,在这我将在后端php做配置,解决跨域问题,在公用控制器设置跨域配置:
class Common extends Controller
{
public $param;
// 设置跨域访问
public function _initialize()
{
parent::_initialize();
isset($_SERVER['HTTP_ORIGIN']) ? header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']) : '';
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, authKey, sessionId");
$param = Request::instance()->param();
$this->param = $param;
}
}
前端调用登录接口: this.axios.post('
', {user: '', password: ''})。
(可在webpack.base.conf.js文件下可定义接口:
)
二、同域
后端配置同上,公共配置器中的header配置注释。将前端的dist文件下的所有文件(包含.htaccess),放在php文件夹下。将后端index控制器的index方法的路径重定向php下的index.html文件:
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
public function index() {
$this->redirect('/index.html');
}
}
前端调用登录接口: this.axios.post('/index.php/base/login', {user: '', password: ''})
转自:
vue中请求的几种方式
<script src="
"></script>
一个不错的项目
vue jsonp
一.万能的Jquery (在存在跨域的情况下,目前用Jquery来请求)
$.ajax({
url:'
', //请求接口
type: "POST", //请求方式(跨域的话默认get提交,)
data: this.param, //请求参数
async:true, //是否异步
dataType: 'jsonp', // 返回数据类型
beforeSend: function(xhr,settings) {
}
}).then(function(data) {
console.log(data)
}
});
二. vue-resource
1,安装——npm install vue-resource
2.应用: this.$http.get('url',{
param1:value1,
param2:value2
}).then(function(response){
// response.data中获取ResponseData实体
},function(response){
// 发生错误
console.log(response)
});
this.$http.post('url',{
param1:value1,
param2:value2
},{
emulateJSON:true
}).then(function(response){
// response.data中获取ResponseData实体
},function(response){
// 发生错误
});
this.$jsonp('url', data ).then(json => {
json 就是返回数据
if(json.code != "002"){
alert(json.msg);
}else{
}
}).catch(err => {
console.log(err)
})
三. 、axios
1.使用npm install来进行安装。 使用npm install来进行安装。
2.在准备使用的vue页面中,引入Axios, import axios from 'axios'
//读取分类商品列表 created钩子函数中
GET: axios.get('
',{ })
.then(response=>{
console.log(response);
})
.catch(error=>{
console.log(error);
alert('网络错误,不能访问');
})
POST: axios.post('/user', { //默认json
firstName: 'Fred',
lastName: 'Flintstone' })
.then(function(response){
// response.data中获取ResponseData实体
})
.catch(function(error){
// 发生错误
});
以上,就是我爱编程网小编给大家带来的php框架vue调用接口 前端vue与后端Thinkphp在服务器的部署全部内容,希望对大家有所帮助!