当前位置: 首页 > 面试题库 >

通过JQuery ajax.post将JSON数据提交到PHP

叶德本
2023-03-14
问题内容

我使用POST通过AJAX将数据提交到php文件。仅提交字符串就可以很好地工作,但是现在我想使用JSON提交JS对象并在PHP端对其进行解码。

在控制台中,我可以看到我的数据已正确提交,但在PHP端,json_decode返回NULL。

我尝试了以下方法:

this.getAbsence = function()
{
    alert(JSON.stringify(this));
    jQuery.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "ajax/selectSingle.php?m=getAbsence",
        data: JSON.stringify(this),
        success : function(data){
            alert(data);
        }
    });
}

PHP:

echo $_POST['data'];
echo json_decode($_POST['data']);
echo var_dump(json_decode($_POST['data']));

和:

this.getAbsence = function()
{
    alert(JSON.stringify(this));
    jQuery.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "ajax/selectSingle.php?m=getAbsence",
        data: {'Absence' : JSON.stringify(this)},
        success : function(data){
            alert(data);
        }
    });
}

PHP:

echo $_POST['Absence'];
echo json_decode($_POST['Absence']);
echo var_dump(json_decode($_POST['Absence']));

警报只是检查一切还好…

是的,通常的字符串被正确地回显了:-)


问题答案:

您在第一个代码中出错的地方是您必须使用以下代码:

var_dump(json_decode(file_get_contents("php://input"))); //and not $_POST['data']

引用PHP手册

php:// input是一个只读流,允许您从请求正文中读取原始数据。

由于您要在主体中提交JSON,因此必须从此流中读取它。通常的方法$_POST['field_name']不会起作用,因为发布主体不是采用URL编码的格式

在第二部分中,您必须使用了以下命令:

contentType: "application/json; charset=utf-8",
url: "ajax/selectSingle.php?m=getAbsence",
data: JSON.stringify({'Absence' : JSON.stringify(this)}),

更新

当request具有内容类型时application/json,PHP不会解析请求,并在中提供JSON对象$_POST,您必须自己从原始HTTP正文中对其进行解析。使用检索JSON字符串file_get_contents("php://input");

如果您必须使用$_POST它,可以做到:

data: {"data":JSON.stringify({'Absence' : JSON.stringify(this)})},

然后在PHP中执行以下操作:

$json = json_decode($_POST['data']);


 类似资料:
  • 本文向大家介绍详解iOS通过ASIHTTPRequest提交JSON数据,包括了详解iOS通过ASIHTTPRequest提交JSON数据的使用技巧和注意事项,需要的朋友参考一下 先验知识——什么是ASIHTTPRequest? 使用iOS SDK中的HTTP网络请求API,相当的复杂,调用很繁琐,ASIHTTPRequest就是一个对CFNetwork API进行了封装,并且使用起来非常简单的一

  • 问题内容: 我有一个php表单,该表单具有已知的列数(例如,顶部直径,底部直径,织物,颜色,数量),但是行数未知,因为用户可以根据需要添加行。 我发现了如何采用每个字段(列)并将其放入各自的数组中。 因此,我最终在HTML中得到的是: 我现在想做的是将所有行和列都放入多维数组,然后将其内容通过电子邮件发送给客户端(最好在格式良好的表中)。我还无法真正理解如何将所有这些输入和选择组合到一个不错的数组

  • 我正在尝试使用POST提交表单,但我有一些来自 标记的额外数据,这些数据已存储到JS对象中。当我从JavaScript中点击时,我想把它发送到服务器。 我尝试做的是用事件发送

  • 问题内容: 是否可以在Struts2的操作中将表单的数据提交到Java Set? 动作代码: 表单代码: 问题答案: 该仅仅是一个集合,Struts2的对任何类型的集合的内部支持。但是对于这种类型的集合,您不能在OGNL表达式中使用索引。尝试

  • 问题内容: 我想将文件和json数据从HttpClient发送到Web api服务器。 我似乎无法通过有效载荷访问服务器中的json,只能作为json变量。 这是客户: 您能否建议在相同的请求下如何访问文件和提交的json和文件? 谢谢 问题答案: 我尝试了多种方法来提交文件数据和元数据,这是我发现的最佳方法: 不要使用MultipartFormDataContent,仅将StreamConten

  • 问题内容: 我有MySQL数据库服务器 我需要通过JSON更新和检索MySQL服务器中的数据 所以,我想知道如何做到这一点,并且让这个示例语句感到困惑: 这意味着我需要先编写与PHP服务器连接的应用程序代码,然后再编写php以连接数据库。 问题答案: 要将数据发送到服务器,您可以执行以下操作: 然后发送让说: 因此服务器上的AddAccelerationData.php文件为: 这是我最近使用的示