AJAX POST到PHP是不行的

时间:2017-03-08 09:56:04

标签: javascript php json ajax

我正在尝试将JSON发布到PHP,它应该被解码并推送到MySQL数据库。

这是我的JavaScript代码。

    var dictstring = "{sensorid: \""+ name +"\", x: " +pos.x +" ,y: "+pos.y+"}";
                    console.log(dictstring);

                    $.ajax({
                        type: "POST",
                        contentType: 'application/json; charset=utf-8',
                         dataType: "json",
                        url: "myfile.php",
                        data: JSON.stringify(dictstring),
                        success: function(data){
                        alert('Success');
                        },
                    error: function(e){

                    console.log(e.message);
                        }
                    });

这是我的PHP代码

<?php


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

$data_back = json_decode($jsonData);
$unit = $data_back->{"sensorid"};
$x_axis = $data_back->{"x"};
$y_axis = $data_back->{"y"};


// Create connection
$con=mysqli_connect("xxxxxxx:xxxx","xxxxx","xxxx","xxxxxxxx");

// Check
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

//Insert Values
$sql_hm = "INSERT INTO xxxx(unit, x_axis, y_axis)
VALUES ('$unit', $x_axis, $y_axis)";

if ($con->query($sql_hm) === TRUE) {
    echo "values inserted successfully"; 

} else {
     echo "No data ";
}



?>

我知道PHP部分有效 - 我尝试使用来自REST客户端应用程序的contentType:application / json发布JSON数据并且它可以工作。但是,当我使用我的Javascript代码尝试它时,它不是POST。我可以看到&#34; dictstring&#34;控制台中的字符串值。我看不到&#34;成功&#34;警惕。有趣的是,&#34;成功&#34;如果删除dataType,则显示alert:&#34; json&#34;线。但是,POSTing仍然没有发生,因为我看不到数据库中的值。

我在这里缺少什么?

4 个答案:

答案 0 :(得分:2)

var dictstring = "{sensorid: \""+ name +"\", x: " +pos.x +" ,y: "+pos.y+"}";

你有一个字符串。

data: JSON.stringify(dictstring),

然后将其转换为该字符串的JSON表示。

$data_back = json_decode($jsonData);

您将其解码为字符串。

$unit = $data_back->{"sensorid"};

你试图像对象那样对待。

从对象开始,而不是字符串:

var dictstring = { sensorid: name, x: pos.x, y: pos.y };

...你可能也想要一个不同的变量名。

答案 1 :(得分:0)

dictstring已经采用JSON格式,您的JS中不需要JSON.stringify

答案 2 :(得分:0)

如果从服务器返回的数据为dataType: "json"

,则使用

JSON

您可以创建一组消息,然后使用echo json_encode($array);JSON数据返回给您的js。

根据您提供的问题和信息来解决您的问题,我无法找到明显的问题,但我可以建议您在成功函数中使用console.log(data),看看是什么退回。您至少知道它是否会访问您的php页面或返回时出现一些错误,例如404500.

尝试$data_back['sensorid']

只需print_r($data_back);并查看$data_back的数据结构,然后尝试相应地访问数据。

答案 3 :(得分:-1)

好吧这可能听起来很傻但是你确定要说明你在java脚本中使用JQuery,因为我已经做了ajax的次数而且我无法弄清楚为什么它不会工作和因为我还没有宣布JQuery。

像这样:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js">