这有点奇怪。
在我的本地开发环境中,这可以完美运行,但是一旦我使用登台或实时服务器 - 事情就不会那么顺利了。
我正在使用 Vue.js 的https://vue-select.org/组件来根据用户输入提取选项。更改选择的TextArea时,我将汇总该方法,然后将字符串发射到API,然后撤回相对于用户输入的任何结果。然后将其填充到选择动态更新和使用的“选项”数组中。
API 链接是使用我的 .env 文件中的变量指定的。在我使用 Laravel Valet 的本地环境中,这可以正常工作。
当站点切换到实时服务器时,事情变得有趣起来。当我尝试在选择字段中输入一个值时,我得到了这个结果:
Mixed Content: The page at 'https://example.com/cv/1fa2383/edit' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://example.com/api/job_title_names'. This request has been blocked; the content must be served over HTTPS.
现在,您会假设这是因为请求是通过 HTTP 而不是 HTTPS 加载的。这是奇怪的部分。没有硬编码或定义为变量的地方有 HTTP 请求,只有 HTTPS。我已经对此进行了四次测试并重新编写甚至硬编码 HTTPS 链接,但由于某种原因,该组件一直尝试通过 HTTP 加载请求。
这真的很奇怪,因为它试图触发两个请求。一个是 GET,另一个是 POST。POST 是我的 Axios 脚本应该执行的操作,但由于某些未知原因添加了 GET 请求。正如您将在下面看到的,没有为该组件上的 get 请求构建代码。
我对此束手无策。以下是有关我的组件和元素引用的一些信息:
我的环境变量:( .test 是我的开发 tld)。
- 测试是我的开发 tld
- /api/ 是我的大多数 axios 请求都经过的。
APP_URL=http://example.test
APP_API_URL=http://example.test/api/
我的输入:
<label>
<span class="block font-bold mb-2 text-grey-500 text-sm">Job Title <i class="fad fa-question-circle leading-none text-blue-400" v-tooltip.top-center="'What was your role in this company?'"></i></span>
<v-select taggable :options="jobTitleOptions" @search="fetchJobTitleOptions" v-model="newEmployment.jobTitle" :filterable="false" class="dynamic-select" placeholder="Type a Job Title">
<template slot="no-options">
Type to find your job title...
</template>
</v-select>
</label>
我的方法:
fetchJobTitleOptions (search, loading) {
loading(true);
this.searchJobTitles(loading, search, this);
},
searchJobTitles: _.debounce((loading, search, vm) => {
console.log('Job Title Url: ' + vm.jobTitleOptionsUrl);
if(search != '') {
axios.post(vm.jobTitleOptionsUrl, {
name: escape(search)
})
.then(response => {
let data = response.data;
vm.jobTitleOptions = data;
loading(false);
});
} else {
loading(false);
}
}, 500),
计算:
jobTitleOptionsUrl: function() {
return this.url + 'job_title_names/'
},
我的组件参考:
apiurl
是APP_API_URL
赋给不同 vue 变量的值。
<edit-employment :apiurl="apiurl" :cvid="this.cv_id"></edit-employment>
刀片模板:
@extends('layouts/app')
@section('content')
<edit-cv url="{{ env('APP_URL') }}" api="{{ env('APP_API_URL') }}" cvid="{{ $cv_id }}" urlslug="{{ $url_slug }}"></edit-cv>
@endsection
使用 Vue 工具,我可以看到所有链接都被正确引用,没有一个链接之前有 HTTP 前缀。
我在本地环境中运行 Nginx,但 Apache 在我的服务器上运行。我不确定这是否有助于诊断?
我为尝试解决此问题而采取的步骤:
- 我已经成功地从 Laravel 方面刷新了所有缓存
- 我已经在 Laravel 中返回了变量,并且可以确认它们正确返回。
- 我已经重写了大多数变量以确保它们 100% 正确
- 我检查了包版本,看看是否存在冲突,其中没有。
任何帮助将不胜感激。
谢谢