所以我有这个代码:
axios({
method: 'post',
url,
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
data: {
json,
type,
}
})
最初我有正常的axios.post
,但我改成了这个,因为我认为这可能是一个标题问题。然而,我仍然没有检测到我的$_REQUEST
或$_POST
。但是,它在file_get_contents("php://输入")
中接收数据。
你知道怎么了吗?
编辑
好吧,我想我知道怎么了。它将其作为json对象发布,因此只能在php://输入中读取。如何将其更改为axios中的普通字符串?
如果您决定在AJAX
库或服务器语言之间切换,可以使事情变得更容易和通用。使用axios
使用本机JSFormData
。
如果对象中有数据,可以将其转换为FormData
,如下所示:
var myDataObj = {id:1, name:"blah blah"}
var formData = new FormData();
for (var key in myDataObj) {
formData.append(key, myDataObj[key])
}
然后发送数据:
axios.post('/sub/process.php', formData, {
params: { action: "update-user" },
headers: { 'Content-Type': 'multipart/form-data' },
baseURL: 'http://localhost',
}).then(data =>
console.log(data)
).catch(err => {
console.log(err)
return null
})
请注意,您还可以使用axios
中的params
发送一些信息,您可以使用$\u GET
检索这些信息。还要注意,我使用的是baseURL,以防您的网页和APIendpoint有不同的服务器
您还需要了解,在axios
发送实际请求之前,它会执行飞行前
请求。飞行前请求是浏览器在CORS中检查资源目的地是否愿意接受真实请求的机制。毕竟,当目标主机无论如何都不愿意接收请求时,为什么会发送请求?
您必须确保您的服务器具有正确的axios请求标头,否则预飞行请求将检测不兼容并停止您的请求:
//this is if you are using different different origins/servers in your localhost, * to be update with the right address when it comes to production
header('Access-Control-Allow-Origin: *');
//this is if you are specifying content-type in your axios request
header("Access-Control-Allow-Headers: Content-Type");
现在,您可以在$\u POST
变量中访问发送的数据:
echo "<pre>";
print_r($_POST);
echo "</pre>";
此外,axios允许您以不同格式发送数据。您可以发送json,例如:
axios.post('/sub/process.php', { id: "1", name:"blablah" }, {
params: { action: "update-item" },
headers: { 'Content-Type': 'application/json' },
baseURL: 'http://localhost',
}).then(data =>
console.log(data)
).catch(err => {
console.log(err)
return null
})
在PHP端,可以按如下方式访问:
$data = json_decode(file_get_contents("php://input"),true);
echo "<pre>";
print_r($data);
echo "</pre>";
var params = {
data1: 'string',
}
axios.post(url, params).then(function(response) {
//code here
});
或者
axios.post(url, {data1: 'string' }).then(function(response) {
//code here
});
应用程序编程接口
$_POST = json_decode(file_get_contents("php://input"),true);
echo $_POST['data1'];
从留档(我没有保留引用材料中的链接):
默认情况下,axios将JavaScript对象序列化到JSON。
PHP不支持JSON作为填充$_POST
的数据格式。
它只支持HTML表单本机支持的机器可处理格式:
要改为以application/x-www-form-urlencoded格式发送数据,可以使用以下选项之一。
在浏览器中,可以使用URLSearchParams API,如下所示:
var params = new URLSearchParams();
params.append('param1', 'value1');
params.append('param2', 'value2');
axios.post('/foo', params);
请注意,并非所有浏览器都支持URLSearchParams,但有一个可用的多填充(请确保对全局环境进行多填充)。
或者,您可以使用qs库对数据进行编码:
var qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 }));
或者,您可以自定义PHP,以便它可以根据另一个问题的回答来处理JSON。
问题内容: 所以我有这段代码: 最初我是正常人,但是我更改为这个,因为我认为这可能是标题问题。但是我仍然没有检测,我也没有。但是,它正在接收数据。 知道有什么问题吗? 编辑 好吧,我想我知道怎么了。它将其作为json对象发布,因此只能在php:// input中读取。如何在axios中将其更改为普通字符串? 问题答案: 从文档中(我没有在引用的材料中保留链接): 默认情况下,axios将JavaS
我们使用WebSphere 7- Application server来部署项目,这个应用服务器被赋予了简单的JVM参数, 但是当尝试启动应用服务器时,会抛出一个本机错误(native_stderr.log ),如下所示, JVM参数在WebSphere中的以下位置给出。 这很奇怪,因为它正在抛出NoClassDefFoundError。 或者 Websphere 中是否有任何其他配置可能导致此问
我需要制作一个程序,从命令行获取可选参数。如果显示flag,我需要读取下面的正则表达式,并将其作为字符串保存到程序中。类似于: 我现在看到的是: 但是,当我从文件夹运行程序时,其中有些文件是和,程序将打印“file1.java”。如何使用“*.java”获取变量? 当我尝试打印所有参数时,使用: 它给了我: 这让我得出结论,我需要以不同的方式阅读参数...
我在获取数据方面有问题。这是控制台中弹出的错误。。。 未捕获的错误:模块构建失败(来自。/node_modules/Babel-loader/lib/index.js): SynTaxError: /var/www/html/laravel/resources/js/components/Content.vue: const是一个保留字(8:4) 我在用法上做错了什么吗? 也在App.js中
直接打印axios的请求拦截的config时是包含那些值为undefined的参数的,但是在浏览器和服务端中却没有了,请问这是哪个环节的问题?应该如何避免这种情况? 打印config的时候params是包含latitude和longitude的 Chrome网络中却不包含这两个参数
我正在尝试使用axios发送数据,但它发送的响应超出预期。当我使用postman发出相同请求时,它会成功地向我的手机发送通知,以下是postman的响应: 但是使用axios,通知不会发送到我的手机,以下是axios的响应: 这是我的axios代码: