使用 jQuery 将 JSON POST 到 Laravel 4

Posted

技术标签:

【中文标题】使用 jQuery 将 JSON POST 到 Laravel 4【英文标题】:POST-ing JSON to Laravel 4 with jQuery 【发布时间】:2014-12-21 20:00:37 【问题描述】:

我已经为此苦苦挣扎了一段时间,我检查了我能想到的一切,我确信这应该工作..但它没有. 这个想法很简单——你有一个“文本”类型的表单输入。当您在输入中键入一个数字并单击“点击我!”时,它应该将 JSON 格式的数据发布到一个 Route(通过 Closure 处理),然后它将检查输入是否为 JSON 格式,如果是,则制作一个数据库请求,然后返回数据。

这是我的看法 (table.blade.php)

<html>
    <head>
        <script src="https://code.jquery.com/jquery-1.11.1.min.js"></script>
        <title>json test</title>
    </head>
    <body>
        <form action="#">
            <input type="text" name="articleID" id="articleid" placeholder="Enter article id" value=""/>
        </form>
        <a href="#" id="trigger">Click me!</a>
        <script>
        $(document).ready(function()
            var a_id = $("#articleid").val();
            var article =  id: a_id ;
            $("#trigger").click(function()
                console.log(article);
                $.ajax(
                    type: "POST",
                    url: "/json",
                    data: article,
                    dataType: 'json',
                    success: function(data)
                        alert(data.title);
                    
                );
            return false;
            );
        );
        </script>
    </body>
</html>

还有我的 routes.php

Route::get('json',function()
    return View::make('table');
);
Route::post('json',function()
    if (Input::isJson())
    
        $request = Input::all();
        $article = Article::find($request['id']);
        if (!is_null($article))
        
            return Response::json($article);
        
        else return Response::json(['error' => "Object not found"],404);
    
    else return "not json";
);

我有两个问题:

console.log(article); 打印 Object id="" 所以 JS 似乎没有 获取input 的值 无论如何,我总是收到回复 "not json",即使我在 ajax 调用中将 data: article 替换为 data: id: 123 之类的东西

更新 感谢 milz,第一个问题现已解决,我重构了 $(document).ready() 函数,如下所示:

                $("#trigger").click(function()
                    var a_id = $("#articleid").val();
                    var article =  id: a_id ;
                    console.log(article);
                    $.ajax(
                        type: "POST",
                        url: "/json",
                        data: article,
                        dataType: 'json',
                        success: function(data)
                            alert(data.title);
                        
                    );
                return false;
                );

现在对象已正确设置,但是后端仍然只返回“not json”... 我不知道我在这里做错了什么,我将不胜感激!提前致谢!

【问题讨论】:

【参考方案1】:

Input::isJson() 实际上检查请求的 Content-Type 标头。 dataType 唯一做的就是告诉 jQuery 期望什么响应。

尝试设置contentType

$.ajax(
    type: "POST",
    url: "/json",
    data: article,
    dataType: 'json',
    contentType: 'application/json',
    success: function(data)
        alert(data.title);
    
);

【讨论】:

以上是关于使用 jQuery 将 JSON POST 到 Laravel 4的主要内容,如果未能解决你的问题,请参考以下文章

WCF POST 通过 JQuery。如何在 JSON 中发送数组?

将 JSON 发送到服务器并返回 JSON,无需 JQuery

无法解析来自 jQuery Ajax POST 的 Json 结果

jQuery - 使用 ajax 调用将 JSON 发送到 WCF 服务为空

使用 jQuery 发布 JSON 后,将字符串转换回 JSON

使用 jquery 和 ajax 将 json 对象发布到 mvc 控制器