如何使用jQuery.post将JSON数据发送到php脚本?

时间:2017-02-01 23:31:40

标签: javascript php jquery json ajax

这是我的javascript代码。变量dataStore是一个有效的JSON对象,JSON.stringify工作正常 - 我使用console.log()进行测试以确定。

我是jQuery的新手,并且暂时没有编写CGI应用程序,所以我可能在这里做错了。

jQuery.post("taskmanager.php", JSON.stringify(dataStore), function (returnData) { 
    alert(returnData); 
});

taskmanager.php脚本与我的其他文件(taskmanager.html,taskmanager.css,taskmanager.js)位于同一文件夹中。此文件夹位于我的Windows7文件夹 E:\ JamesLaderoute \ MySoftware \ WebApp \ TaskManager \ code

我不确定将什么放入taskmanager.php脚本中。我以为我可以做一些简单的事情:

<?php

    $data = $_GET["data"];

    echo "done";

?>

我不明白的是,php脚本将如何知道我的JSON字符串化信息被调用&#34; data&#34;。

另外,我认为jQuery.post()将脚本名称作为第一个参数,然后将要发送到脚本的数据后跟一个回调函数,当脚本通过 echo <返回数据时调用该函数/ strong>来电。

alert()确实被调用但是它显示的是php脚本而不是字符串&#34;已完成&#34;

我已经搜索了互联网(一点点),并找到了一些使用AJAX的东西将数据发送到像php这样的脚本的例子。

我通过一个小例子学到了最好的东西,是否有一个很好的例子可以指出我所缺少的东西?我如何让它工作?

最终我计划获取JSON数据,并将其保存到服务器上的文件中。我是否需要使用真正的服务器来运行这一切?现在我没有使用一个,但我确实有WAMP设置,所以我可以使用它,如果这是必需的。

感谢所有发布问题解答的人。我正在编辑此帖子,以显示我最终使用的实际代码,以使我的应用程序正常运行。

JavaScript代码:

alert(returnData); });
        $.ajax({
            url : "taskmanager.php" ,
            type : 'POST',
            data : JSON.stringify(dataStore),
            success : function(res) {
                    // Successfully sent data
                  console.log(res);
            },
            error: function(err) {
                // Unable to send data
                  console.log(err);
            }
        });

PHP代码:

<?php

    $contents = file_get_contents('php://input');
    $data = json_decode( $contents );

    file_put_contents( "taskdata.json",  "data=".$contents );

    echo "<br>done</br>";

?>

3 个答案:

答案 0 :(得分:2)

jQuery ajax数据的默认Content-Typeapplication/x-www-form-urlencoded,使用$_GET$_REQUEST$_POST非常容易在php中使用,并且不会; t需要字符串化为json

将对象直接传递给$.post(或任何$ .ajax方法),jQuery将在内部对其进行编码

var data ={foo:'bar'};
$.post('taskmanager.php', data, function(resp){
   console.log(resp);
})

PHP

echo $_POST['foo'];

如果您只想使用json,则需要设置适当的Content-Type

$.ajax({
   url:'...',
   method:'post',
   contentType:'application/json',
   dataType:'json',
   data: JSON.stringify(data)
}).done(function(resp){
   console.log(resp);
});

然后在php中使用:

$data = json_decode(file_get_contents('php://input'));
$data['foo'] ='Some new value';
echo json_encode($data);

答案 1 :(得分:1)

使用jQuery,您可以使用POST协议将数据发送到终点。以下示例

$.ajax({
    url : 'taskmanager.php',
    type : 'POST',
    data : JSON.stringify(dataStore),
    success : function(res) {
        // Successfully sent data.
        console.log(res);
    },
    error: function(err) {
        // Unable to send data.
        console.log(err);
    })
});

你也可以使用$ .post方法,它只是一个偏好。 $ .ajax提供了一些额外的灵活性,以防您可能希望将协议更新为GET而不是发布或许多其他实例......

有关此内容的更多信息:http://forum.jquery.com/topic/what-should-i-use-post-vs-ajax

答案 2 :(得分:0)

我通常使用以下命令将JSON POST到php ...

 @if (@ViewBag.AList != null)
    {
    <table cellpadding="1" border="1">
    <tr>
        <th>
            Widget Name 
        </th>
     </tr>

@foreach (MvcProgramX.Models.LIST_FULL item in @ViewBag.AList)
   {
    <tr>
        <td>
            @item.WidgetName
        </td>        
    </tr>
   }

   </table>
  }