2017-03-08 170 views
-1

我想發佈一個JSON到PHP,它應該被解碼並推送到MySQL數據庫。AJAX發佈到PHP不起作用

這是我的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的一部分工作 - 我試圖在張貼的contentType JSON數據:從REST客戶端應用程序的應用程序/ JSON和它的作品。但是當我用我的Javascript代碼嘗試它時,它不是發佈。我可以在控制檯中看到「dictstring」字符串值。我也看不到「成功」警報。有趣的是,如果我刪除dataType:「json」行,則會顯示「Success」警報。但是,POSTing仍然沒有發生,因爲我看不到數據庫中的值。

我在這裏錯過了什麼?

+0

爲什麼'dictstring'是一個字符串?爲什麼你將它傳遞給'JSON.stringify()'? – Andreas

+0

我認爲你不需要'stringify'因爲'dictstring'已經是一個JSON字符串。 –

+0

不要編寫自己的JSON,也不要多次發佈相同的問題。 – miken32

回答

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 }; 

...你可能想要一個不同的變量名了。

+0

是的,這是做的伎倆。感謝您的信息... – NoMadic

0

dictstring已經是JSON格式,你不需要JSON.stringify在JS

+0

嘗試刪除JSON.stringify(dictstring),並將其保存爲數據:dictstring - 但是這也不起作用 – NoMadic

-1

好吧,可能聽起來很傻,但有你確信地指出你在Java腳本使用JQuery,因爲量次我一直在做Ajax,我不知道爲什麼它不會工作,因爲我沒有宣佈JQuery。

這樣的:

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

dataType: "json"是使用。如果從服務器返回的數據是JSON

您可以創建消息的數組,然後使用echo json_encode($array);JSON數據返回到您的JS。

從問題和您提供的信息來看,我找不到明顯的問題,但我可以建議在您的成功功能中使用console.log(data)並查看返回的內容。你至少知道,如果它擊中你的PHP頁面或像404500.

一些錯誤返回嘗試$data_back['sensorid']

只是print_r($data_back);,看到的$data_back的數據結構,然後嘗試訪問數據。

+0

試過。它不接收json數據。顯示錯誤注意:嘗試獲取C:\ wamp \ www \ heatmap \ myfile.php中的非對象屬性,行 7 – NoMadic