- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我遇到了一个问题,我已经处理了几天,但找不到解决方案。我用 Lumen 创建了一个 API,用 ReactJS 创建了一个前端。这一切都适用于 GET 请求,但是当我发送 POST 请求时它失败了。由于一些奇怪的原因,当我用 Postman 发送请求时,这些请求有效。现在是一些代码!
首先是发送请求的 JS 脚本:
import moment from 'moment';
import React, {Component} from 'react';
import { Modal, Form, Button, Input, DatePicker, Select, message } from 'antd';
const {RangePicker} = DatePicker;
const FormItem = Form.Item;
const Option = Select.Option;
const api_url = 'api/v1/';
class NewEventForm extends React.Component {
constructor(props) {
super(props);
this.state = {
confirmLoading: false,
categories: []
};
this.onCreate = this.onCreate.bind(this);
this.onCancel = this.onCancel.bind(this);
}
componentDidMount() {
fetch(api_url + 'category')
.then(results => {
return results.json();
}).then(data => {
let categories = data.map((cat) => {
return (
<Option key={cat.id} value={cat.id}>{cat.name}</Option>
);
});
this.setState({categories: categories});
});
}
updateStates() {
this.props.updateState();
this.setState({confirmLoading: false});
}
onCreate() {
this.props.form.validateFields((err, values) => {
this.setState({
confirmLoading: true
});
if (err) {
this.setState({
confirmLoading: false
});
return;
}
let event = {
title: values.title,
description: values.description,
start_time: values.date[0],
end_time: values.date[1],
category_id: values.category
};
fetch(api_url + 'event', {
method: 'POST',
/* headers are important*/
headers: {
"content-type":"application/json",
"cache-control":"no-cache",
"accept":"*/*",
},
body: JSON.stringify(event)
}).then(response => {
if(response.ok) {
return response.json();
}
throw new Error("Antwort der API war nicht 'Ok'!");
}).then(data =>{
this.updateStates();
message.success('Das Ereignis wurde erfolgreich eingetragen!');
}).catch(error => {
//console.log(error);
this.updateStates();
message.error('Das Ereignis wurde nicht erstellt. Bitte versuche es später nochmal!');
});
});
}
onCancel(e) {
e.preventDefault();
this.updateStates();
}
render() {
const {getFieldDecorator, getFieldError} = this.props.form;
return(
<Modal title="Neue Veranstaltung hinzufügen" okText="Eintragen" confirmLoading={this.state.confirmLoading} visible={this.props.visible} onOk={this.onCreate} onCancel={this.onCancel}>
<Form layout="vertical">
<FormItem label="Titel">
{getFieldDecorator('title', {
rules: [{required: true, message: 'Bitte einen Titel angeben!' }],
})(
<Input />
)}
</FormItem>
<FormItem label="Beschreibung">
{getFieldDecorator('description')(<Input type="textarea" />)}
</FormItem>
<FormItem label="Kategorie">
{getFieldDecorator('category', {
rules: [{required: true, message: 'Bitte einen Kategorie auswählen!' }],
})(
<Select placeholder="Kategorie auswählen...">
{this.state.categories}
</Select>
)}
</FormItem>
<FormItem label="Zeitraum" className="collection-create-formlast-form-item">
{getFieldDecorator('date', {
rules: [{required: true, message: 'Bitte einen Zeitraum auswählen!' }],
})(
<RangePicker
showTime={{
hideDisabledOptions: true,
defaultValue: [moment('00:00', 'HH:mm'), moment('00:00', 'HH:mm')],
format: 'HH:mm'
}}
format="DD.MM.YYYY HH:mm"
/>
)}
</FormItem>
</Form>
</Modal>
);
}
}
export const NewEventModal = Form.create()(NewEventForm);
我的数据库有三个模型。事件、类别和用户:Category.id<---1:n--->Event.category_id||Event.updated_by<---n:1--->User.id
现在是事件 Controller :
<?php
namespace App\Http\Controllers;
use App\Event;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class EventController extends Controller{
public function index(){
$Events = Event::all();
return response()->json($Events);
}
public function getEvent($id){
$Event = Event::with(['category', 'user'])->find($id);
return response()->json($Event);
}
public function createEvent(Request $request){
$User = \App\User::find(1);
$Category = \App\Category::find(1);
$Event = new Event;
$Event->fill($request->all());
$Event->user()->associate($User);
$Event->category()->associate($Category);
$obj = '';
foreach ($request->all() as $key => $value) {
$obj .= '[' . $key . '] => "' . $value . '"; ';
}
\Log::warning('Test: ' . $obj);
$Event->save();
return response()->json($request);
}
public function deleteEvent($id){
$Event = Event::find($id);
$Event->delete();
return response()->json('deleted');
}
public function updateEvent(Request $request,$id){
$Event = Event::find($id);
$Event->title = $request->input('title');
$Event->description = $request->input('description');
$Event->start_time = $request->input('start_time');
$Event->end_time = $request->input('end_time');
$Event->save();
return response()->json($Event);
}
}
和事件模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Event extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['title', 'description', 'start_time', 'end_time'];
public function user() {
return $this->belongsTo('App\User', 'updated_by');
}
public function category() {
return $this->belongsTo('App\Category');
}
}
正如我所说,当我使用 Postman 发送 POST 请求时,一切都按预期工作。但是使用我的 fetch() 函数我得到了 200 响应,但是在数据库中只有“created_at”和“updated_at”被填充,其余的只是一个空字符串。 EventController 中的 Log-statement 显示,这似乎是 Request-object 为空。但是查看 Firefox 开发人员工具,我发现数据是在请求正文中发送的。
有什么想法吗?如果需要,我还可以发送其他代码文件。
谢谢大家的帮助马可
编辑: 由于不明显,API 和前端都在同一台主机上运行; localhost:8000 所以这不是 CORS 问题。我首先在 localhost:8080 上运行前端,但我通过在同一台服务器上运行两者来消除它。
最佳答案
果然在没有人真正能够直接回答我的问题的情况下,我的错并不明显。我今天和一个 friend 一起认识到,我实际发送的请求与我在代码中写的不同。通过更多搜索,我发现我的 webpack.config 配置有误,并将代码发布到错误的目录中。但是由于已经有一个“较旧”的 js 文件,该页面看起来是正确的,但没有我的 API 调用的更改。
TL;DR 注意一切都在你需要的地方然后上面的代码是正确的:-)
关于javascript - POST 请求适用于 Postman,但不适用于 axios 或 .fetch(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48240949/
我已经制作了一个用于报名参加 Activity 的小应用程序。用户输入他们的数据,然后单击“登录我”。 现在有时人们在数据库中是双倍的,完全相同的数据彼此之间很快被插入了两次。这只能表示某人单击了两次
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: PHP: “Notice: Undefined variable” and “Notice: Undefin
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: PHP: “Notice: Undefined variable” and “Notice: Undefin
我正在尝试将数据从 Textarea 发布到经典的 ASP 脚本,该脚本更新本地计算机上的 MS SQL,然后发布到另一台服务器上的 PHP 脚本。但是,执行以下操作不起作用,因为它会切断文本区域的数
无效的代码: login_form = page.form_with(:method => 'post') 和有效的代码: login_form = page.form_with(:method =>
我希望能够在 HTTP Post 请求被触发时拦截它,然后修改其请求正文(或参数),然后发送它。 这怎么可能用 jquery/js 实现。 谢谢 最佳答案 Jquery ajax beforeSend
我想编写一个 Mysql 语句,从表(发布)中选择所有内容,其中标题类似于 $title 除了 $title 的标题。基本上我想显示某个帖子的所有相关帖子。我希望查询选择表中标题或详细信息中具有标题名
我已经成功创建了一个简单的 HTML 表单,它将上传的文件发布到我的 Amazon S3 存储桶。我遵循了以下说明: http://aws.amazon.com/articles/1434 现在我正在
我正在实现一个 PayPal IPN 页面,并想检查以确保请求真正来自 PayPal 而不是被欺骗。我假设 HTTP_REFERRER 不是一个好的检查方式?我已经尝试过这种方法,但变量只是空的。 有
我有一个非常简单的设置有一个非常特殊的问题。 该设置部署了 nginx Web 服务器以提供一些静态页面。它还有一个用于处理 POST 请求的后端 uwsgi 守护进程。 我的nginx位置配置如下
我认为我做错了什么,或者误解了我在网上阅读的有关 POST 和 GET 请求的内容。我在 myNumber.ejs 上有一个提交表单。当我按下提交时,有 Add.ejs 的 View 。 Add.ej
我需要将数据从 Express 应用程序的前端发送到后端,然后使用需要显示该数据的 EJS 呈现页面。 问题是 app.post() 方法,随后 res.render() 函数似乎没有完全执行或者当我
根据AWS Documentation对于 CloudFormation cfn-hup 帮助程序脚本,cfn-hup Hook 可以具有“要检测的以逗号分隔的条件列表”。这些条件/触发器可以是 po
位于“wp-admin/includes/”的“post.php”文件中的 wordpress 函数“get_default_post_to_edit”无法正常工作。 当我加载页面时:wp-admin
我使用请求库发布数据,但在服务器上收到空主体,没有传递任何数据。我在代码中遗漏了什么吗? Map map = new Map(); map[csrfNameKey] = csrfName;
我正在尝试使用 siege 3.0.1 测试我的网站。但是好像siege不发送POST数据。这是我从网络浏览器收到的请求 POST / HTTP/1.0 Accept: text/html,appli
我正在尝试为 stockfigher 游戏 api 编写包装器,只是为了了解 feign 是如何工作的,而且我在第一个 POST 方法中遇到了问题: @RequestMapping(method =
如何使用 Jersey 获取原始 POST? @FormParam将不起作用,因为我发布的原始 JSON 不在任何特定的 POST 字段中。 最佳答案 Jersey 带有一个用于将 JSON 映射到
我正在尝试同时创建一个实体和两个子实体的实例。 如果我将以下 JSON 发布到/user_objects 资源,它会很高兴地创建父 user_object 实体和链接的 User_object_att
在 IPV6 中如何使用 IPV6 地址和端口号构建 CURL POST http 请求。任何类型的线程都将受到赞赏。 尝试构建如下请求 >curl --interface 'http://[2001
我是一名优秀的程序员,十分优秀!