gpt4 book ai didi

javascript - 从 Angular 到 Laravel 的 POST 不起作用

转载 作者:行者123 更新时间:2023-12-03 11:52:11 25 4
gpt4 key购买 nike

我一直在开发一个运行正常的 REST API。通过像 Postman 这样的客户端,只要我使用 x-www-form-urlencoded

对数据进行编码,我就可以测试并查看我的更改、删除、添加等工作。

但是现在我正在尝试将它与 Angular 连接起来。我可以很好地发出 GET 请求,而 POST 却让我困惑不已。

这是我在 Angular .js 中执行肮脏工作的临时指令(我知道我需要为此创建一个服务):

app.directive('addGoal', function($http) {
return {
restrict: 'E',
templateUrl: 'js/templates/add-goal.html',
link: function(scope) {
scope.submit = function(data) {
data = {
goal: {
summary: "asdf",
details: "asdf",
start_date: "2014-01-01",
end_date: "2014-01-02"
}
};
console.log(data);
$http({
url: 'http://localhost:8000/v1/goal/',
method: 'POST',
data: data,
headers: {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'}
}).
success(function() {
console.log(data);
}).
error(function() {
console.log('error');
});
};
}
};
});

调用已触发,.success() 函数 正常运行,但数据未在我的 API 中发布,因此未保存到数据库中。

当我收到回复时,它的表现就像格式不正确,因为它在验证时出错:

{"error":true,"message":{"summary":["The summary field is required."],"details":["The details field is required."],"start_date":["The start date field is required."],"end_date":["The end date field is required."]}}

仅供引用,这里是 Laravel 中 Controller 的 store() 函数执行 API 工作:

public function store()
{
$goal = new Goal;
$goal->summary = Request::get('summary');
$goal->details = Request::get('details');
$goal->user_id = Auth::user()->id;
$start_date_entered = Request::get('start_date');
$end_date_entered = Request::get('end_date');
$goal->start_date = date('Y-m-d', strtotime($start_date_entered));
$goal->end_date = date('Y-m-d', strtotime($end_date_entered));

$validation = Validator::make(Request::all(), [
'summary' => 'required|max:255',
'details' => 'required|max:255',
'start_date' => 'required|date',
'end_date' => 'required|date'
]);

if ($validation->fails())
{
$messages = $validation->messages();
return Response::json(array(
'error' => true,
'message' => $messages),
200
);
}
else
{
$goal->save();

return Response::json(array(
'error' => false,
'goal' => $goal->toArray()),
200
);
}
}

我创建了这样的测试路线:

Route::post('/test', function()
{
// First we fetch the Request instance
$request = Request::instance();

// Now we can get the content from it
$content = $request->getContent();

var_dump($content);
});

令人惊讶的是我的回复看起来像这样:

string(94) "{"goal":{"summary":"asdf","details":"asdf","start_date":"2014-01-01","end_date":"2014-01-02"}}"

如果成功函数被触发,它就会调用 API,对吗?我怎样才能进一步解决这个问题以找出真正的问题?我陷入了下一步应该将这些数据输入 API 的位置,以便它可以正确存储它,就像在 REST 客户端中所做的那样。

编辑

经过审查,实际问题涉及我设置 Laravel 的方式,并且它无法理解传入的 JSON。一个简单的修复是将 Request::get 更改为 Input::json()->get():

$goal->summary = Input::json()->get('summary');

最佳答案

我使用 Telerik fiddler :http://www.telerik.com/fiddler为了这样的目的。它提供以下信息。

  1. 请求详细信息,例如数据、方法、请求 header 、身份验证 header 、Cookie 等。
  2. 响应详细信息、数据、 header

它还允许我们通过修改方法和数据来重放给定的请求,以检查服务在不同输入下的行为方式。

希望有帮助。

此外,我认为即使您像下面这样更改数据格式,它也应该可以工作。

               data = {
summary: "asdf",
details: "asdf",
start_date: "2014-01-01",
end_date: "2014-01-02"
};

关于javascript - 从 Angular 到 Laravel 的 POST 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25774616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com