Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从角度到角度的立柱不工作_Javascript_Php_Angularjs_Rest_Laravel - Fatal编程技术网

Javascript 从角度到角度的立柱不工作

Javascript 从角度到角度的立柱不工作,javascript,php,angularjs,rest,laravel,Javascript,Php,Angularjs,Rest,Laravel,我一直在开发一个正常工作的RESTAPI。通过像Postman这样的客户机,只要我使用x-www-form-urlencoded 不过现在我想用Angular把它连接起来。我可以提出一个GET请求很好,这篇文章让我很不舒服 下面是我在Angular.js中的scratch指令(我知道我需要为此创建一个服务): 调用被触发,.success()函数正常运行,但是数据没有发布到我的API中,因此没有保存到数据库中 当我收到回复时,它表现为格式不正确,因为它在验证时出错: {"error":true,

我一直在开发一个正常工作的RESTAPI。通过像Postman这样的客户机,只要我使用
x-www-form-urlencoded

不过现在我想用Angular把它连接起来。我可以提出一个GET请求很好,这篇文章让我很不舒服

下面是我在Angular.js中的scratch指令(我知道我需要为此创建一个服务):

调用被触发,
.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中的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"}}"
令人惊讶的是,我的回答是这样的:

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"}}"
如果success函数正在启动,那么它正在命中API,对吗?如何进一步排除故障以找出真正的问题?我被困在下一步应该去哪里将这些数据放入API中,以便它能够正确地存储它,就像它在REST客户机中所做的那样

编辑

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

我使用Telerik fiddler:就是为了这个目的。它提供了以下信息

  • 请求详细信息,如数据、方法、请求头、身份验证头、cookie等
  • 响应详细信息、数据、标题
  • 它还允许我们通过修改方法和数据来重播给定的请求,以检查服务在不同输入下的行为

    希望能有帮助

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

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

    angular将在请求体中以
    application/json
    的形式发送数据,这正是您在var_转储中看到的。json_解码它,而不是使用PostMethodSturns out,在某种程度上,你的评论就是答案。API上不需要JSON,我完全不知道这一点。所以,当我以URL字符串的形式提交它时,就像
    summary=asdf&details=asdf&start\u date=Jan+1+2014&end\u date=Jan+2+2014
    一样,它就像一个符咒。但是你只能查询字符串长度,对请求体进行json_解码要简单得多。看起来我只需要重新编写我的幼虫控制器,从那里获取json并进行解码。这对我来说不起作用,尽管我可以看到你的想法。不过,我只是确认发送一个类似字符串的url,比如:
    summary=asdf&details=asdf&start\u date=Jan+1+2014&end\u date=Jan+2+2014
    。我不确定,但请您再试一次,输入::post('summary')//而不是请求::get('summary')Input::post('summary')投诉,以下是Laravel回复的信息:
    {“error”:{“type”:“Symfony\\Component\\Debug\\Exception\\FatalErrorException”,“message”:“调用未定义的方法illumb\\Http\\Request::post()”,“file”:“\/vagrant\/Laravel\/vendor\/Laravel\/framework\/src\/illumb\/Support\/Facades\/Facades.php”,“line”:208}”
    我刚刚在Laravel的post store()方法中尝试了这个方法,它成功返回:
    $goal=new goal$目标->摘要=输入::json()->get('summary');返回$goal我可能可以从那里得到我需要的东西。啊!我只是指将值发布到API。