php - 使用 jQuery 将 JSON 发布到 Laravel 4

标签 php jquery json laravel laravel-4

我已经为此苦苦挣扎了一段时间,我检查了我能想到的所有内容,我确信这应该有效..但事实并非如此。 这个想法很简单 - 你有一个“文本”类型的表单输入。当您在输入中键入数字并单击“Click me!”时,它应该将 JSON 格式的数据发布到路由(通过闭包处理),然后路由检查输入是否为 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 似乎没有 获取输入的值
  • 无论如何,我总是收到响应“not json”,即使我将data:article替换为data:{id:123 } 在 ajax 调用中

更新 感谢 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”... 我不知道我在这里做错了什么,我将不胜感激任何帮助!提前致谢!

最佳答案

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

尝试设置contentType

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

关于php - 使用 jQuery 将 JSON 发布到 Laravel 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26574045/

相关文章:

javascript - 使用点符号字符串访问对象子属性

php - MYSQL:创建查询以显示条目的父级/层次结构(面包屑)

javascript - 使用 ajax/Javascript 动态验证用户选择

php - 如何使用 'DROP TABLE IF EXISTS'导入多数据库MySQLdump?

php - 在 Laravel/Eloquent 中返回多个而不是一个

javascript - Jquery ajax Post 不起作用?

jquery - 如何避免 div 列表上出现双边框

javascript - 从 JavaScript 对象中删除整个键

java - 使用 jackson - @JsonPropertyOrder 进行 Json 到 POJO 解析,以下 Json 根据#students 有所不同?

php - 我想将选定的选项从一个文本框传递到第二个文本框