在ajax POST方法期间,JSON对象作为NULL接收到服务器

搜索过,似乎无法找到答案。 我正在使用ajax发布这个填充了对象的字符串化数组,JSONLint对于一个现在只返回它的php脚本没问题。 </ p>

然而,在传输过程中,对象变为NULL。 我发送JSON字符串的方式有问题吗? 我真的很感激为此提出一些建议,会给出虚拟的高五。 感谢您的时间!</ p>

JS </ p>

  var newDist = $(“#distanceEl”)。val(); 
var newDate = $(“#dateEl”)。val();
var newId = this.arr.length + 1;
var newStat = new Stat(newId,newDist,newDate);

this.arr.push (newStat);
var newData = JSON.stringify(this.arr);
console.log(newData);

$ .ajax({
url:“php / post.php”,
类型:“POST”,
dataType:“json”,
contentType:“application / json”,
data:newData,

success:function(response)
{
console.log(“ Ajax:“+ JSON.parse(response));
},

错误:function(requestObject,error,errorThrown)
{
console.log(”Ajax Post Request出错:“+ error) ;
console.log(errorThrown);
}
});
</ code> </ pre>

PHP </ p>

   $ jsonData = json_decode($ _ POST ['newData']); 
echo json_encode($ jsonData);
</ code> </ pre>
</ div>

展开原文

原文

Searched around and couldn't seem to find an answer. I am using ajax to post this stringified array filled with objects, which JSONLint's alright to a php script which right now just returns it.

However over the transmission the object turns into NULL. Is there something wrong with the way I'm sending my string of JSON? I would really appreciate some advice for this, will give out virtual high fives. Thanks for your time!

JS

  var newDist = $("#distanceEl").val();
    var newDate = $("#dateEl").val();
    var newId = this.arr.length + 1;
    var newStat = new Stat(newId, newDist, newDate);

    this.arr.push(newStat);
    var newData = JSON.stringify(this.arr);
    console.log(newData);

    $.ajax({
        url : "php/post.php",
        type: "POST",
        dataType : "json",
        contentType : "application/json",
        data: newData,

        success: function(response)
        {
            console.log("Ajax: " + JSON.parse(response));
        },

        error: function(requestObject, error, errorThrown)
        {
            console.log("Error with Ajax Post Request:" + error);
            console.log(errorThrown);
        }
    });

PHP

 $jsonData = json_decode($_POST['newData']);
echo json_encode($jsonData);

dpgui8229808
dpgui8229808 抱歉,我的意思是“newData”是一个JSON数组对象,当我将其插入JSONLint时,它是有效的JSON。当我回应json_last_error_msg();我在位置0的JSON中收到SyntaxError:UnexpectedtokenS.
2 年多之前 回复
douliedu335997
douliedu335997 当你使用dataType:“json”时,它将解码它,所以JSON.parse(响应)将返回UncaughtSyntaxError:数组的JSON输入的意外结束和UncaughtSyntaxError:对象的位置1的JSON中的意外标记o,通过解析你不能将该对象作为一个字符串在console.log中解析(“Ajax:”+JSON.parse...;
2 年多之前 回复
douhui1957
douhui1957 [{“ID”:1,“距离”:“1.2MI”,“日期”:“18年1月2日”},{“ID”:1,“距离”:“2.3MI”,“日期”:“18年1月4日”},{“ID”:3“距离”:“1.7MI”,“日期”:“18年1月6日”},{“ID”:4“距离”:”defaultDis”,“日期”:“defaultDate”}]
2 年多之前 回复
doupai8533
doupai8533 你已经有了json数据,而不是为什么你做了json_decode而不是agianjson_encode。另请检查$_POST['newData']的值;
2 年多之前 回复
douxiong2999
douxiong2999 echojson_last_error_msg();,我不知道这意味着什么JSONLint对于现在只返回它的php脚本是好的。
2 年多之前 回复
duan0714
duan0714 console.log(newData)的结果是什么?
2 年多之前 回复

1个回答



由于您在请求中使用 contentType:“application / json”</ code>,因此您发送的数据不会 填充 $ _ POST </ code>。 您可以使用 file_get_contents('php:// input')</ code> </ p>

您还不需要 JSON.parse </ code>响应,因为您已经 使用 dataType:“json”</ code> </ p>

在你的js上</ p>

  $ .ajax({
url: “php / post.php”,
类型:“POST”,
dataType:“json”,
contentType:“application / json”,
data:newData,
success:function(response)
{
console.log(“Ajax:”,响应);
},
错误:function(requestObject,error,errorThrown)
{
console.log(“Ajax Post Request出错:”+错误 );
console.log(errorThrown);
}
});
</ code> </ pre>

在PHP上:</ p>

  $ input = file_get_contents('php:// input'); 
$ jsonData = json_decode($ input);
echo json_encode($ jsonData);
</ code> </ pre>
\ n

其他选项是,不要将您的数据发送为 contentType:“application / json”</ code> </ p>

在您的js上 :</ p>

  var newData = [{“id”:1,“distance”:“1.2mi”,“date”:“1/2/18”},{“  ID”:  1, “距离”: “2.3MI”, “日期”: “18年1月4日”},{ “ID”:3 “距离”: “1.7MI”, “日期”:“18年1月6日 “},{”id“:4,”distance“:”defaultDis“,”date“:”defaultDate“}]; 

$ .ajax({
url:”data.php“,
type :“POST”,
dataType:“json”,
data:{newData:newData},//将数据作为对象传递。 无需字符串化newData
success:function(response)
{
console.log(“Ajax:”,response);
},
错误:function(requestObject,error,errorThrown)
{\ n console.log(“Ajax Post Request错误:”+错误);
console.log(errorThrown);
}
});
</ code> </ pre>

在您的PHP上:</ p>

  echo json_encode($ _ POST ['newData']); 
</ code> </ pre>
</ div>

展开原文

原文

Since you are using contentType : "application/json" on your request, the data you sent will not populate the $_POST. You can use file_get_contents('php://input')

You dont also need JSON.parse the response since you already using dataType : "json"

On your js

$.ajax({
    url : "php/post.php",
    type: "POST",
    dataType : "json",
    contentType : "application/json",
    data: newData,
    success: function(response)
    {
        console.log("Ajax: " , response);
    },
    error: function(requestObject, error, errorThrown)
    {
        console.log("Error with Ajax Post Request:" + error);
        console.log(errorThrown);
    }
});

On your PHP:

$input = file_get_contents('php://input');
$jsonData = json_decode($input);
echo json_encode($jsonData);

Other option is, don't sent your data as contentType : "application/json"

On your js:

var newData = [{"id":1,"distance":"1.2mi","date":"1/2/18"},{"id":1,"distance":"2.3mi","date":"1/4/18"},{"id":3,"distance":"1.7mi","date":"1/6/18"},{"id":4,"distance":"defaultDis","date":"defaultDate"}];

$.ajax({
    url : "data.php",
    type: "POST",
    dataType : "json",
    data: {newData : newData}, //Pass your data as object. No need to stringtify newData
    success: function(response)
    {
        console.log("Ajax: " , response);
    },
    error: function(requestObject, error, errorThrown)
    {
        console.log("Error with Ajax Post Request:" + error);
        console.log(errorThrown);
    }
});

On your PHP:

echo json_encode($_POST['newData']);

dsilhx5830
dsilhx5830 乐于帮助 :)
2 年多之前 回复
dongzouh51192
dongzouh51192 非常感谢!! @Eddie
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问