2016-03-05 134 views
2

我覺得自己沒有找到答案。我如何在這裏正確格式化或訪問JSON?

我想通過jQuery,AJAX和JSON將數據發送到php文件來將客戶添加到數據庫。

它的工作原理,但是,當我嘗試訪問對象中的變量時,我得到一個空的響應。我不明白爲什麼。

這裏是我的PHP代碼:

$connection通過我的DB連接以後,但我還沒有訪問它由於調試

function addCustomer($connection){ 
    $data = json_decode($_POST['data'], true); 
    $surname = $data['surname']; 
    $name = $data['name']; 
    $street = $data['street']; 
    $streetNumber = $data['streetNumber']; 
    echo $_POST['data']; 
    echo $data; 
    echo $name; 
} 

前兩個回波給回我的期望,但第三個只輸出{


這裏是JS代碼:

function addCustomer(){ 
    var $surname = $('#addCuSurname').val(); 
    var $name = $('#addCuName').val(); 
    var $street = $('#addCuStreet').val(); 
    var $streetNumber = $('#addCuStreetNumber').val(); 

    if($surname != '' && $name != '' && $street != '' && $streetNumber != ''){ 

     var customer = '{"surname": "'+ $surname +'", "name": "'+ $name+'", "street": "'+ 
         $street+'", "streetNumber": '+ $streetNumber +'}'; 

     $.ajax({ 
      url: 'scripts/backend/customers.php', 
      type: 'post', 
      data: {'action': 'addCu', 'data': JSON.stringify(customer)}, 
      dataType: "text", 
      success: function(response, status) { 

      }, 
      error: function(xhr, desc, err) { 
       console.log(xhr); 
       console.log("Details: " + desc + "\nError:" + err); 
      }, 
     }); 
    } 
} 

這可能是我假設的JSON語法錯誤,但我沒有找到任何可以幫助我的東西。

在此先感謝。

+0

爲什麼你需要將它作爲JSON傳遞?您可以在'data'參數中嵌套對象,並將它們作爲PHP中的嵌套數組訪問,例如'$ _ POST [ '數據'] [ '姓']'。 – Barmar

+0

@Barmar我不需要,只是想嘗試一下,這是我自己的一個啓動項目,感謝您的建議 – Sens

回答

1

你試圖將已經是字符串的東西串起來。嘗試定義客戶,像這樣:

var customer = { 
    surname: $surname, 
    name: $name, 
    street: $street, 
    streetNumber: $streetNumber 
} 
+1

謝謝,工作就像一個魅力:D – Sens

0

的問題是,你正在申請JSON.stringify()分配給客戶的字符串(是的,它是代表一個JSON一個字符串):

var customer = '{"surname": "'+ $surname +'", "name": "'+ $name+'", "street": "'+ 
       $street+'", "streetNumber": '+ $streetNumber +'}'; 

當你它,你得到的是一個表示代表JSON的字符串的字符串。例如,我跑在Firebug這些行:

> JSON.stringify({a: 1, b: 2}); 
"{"a":1,"b":2}" 
> JSON.stringify("{a: 1, b: 2}"); 
""{a: 1, b: 2}"" // A string representing a string representing a JSON. 

正如你所看到的,在第一個例子中,我得到了代表一個JSON字符串。第二個示例(對錶示JSON的字符串進行字符串化)返回表示JSON字符串的sting。我希望不要太混淆這些想法。讓我們去解決方案。

您有兩種選擇。首先,你可以建立一個JSON而不是一個JSON字符串的:

var customer = { 
    surname: $surname, 
    name: $name, 
    street: $street, 
    streetNumber: $streetNumber 
}; 

然後字符串化它。

另一種選擇是保留JSON字符串,就像構建它一樣,但不會將JSON.stringify()應用於它。

... 
data: {'action': 'addCu', 'data': customer}, 
... 

我會去的第一個解決方案,因爲這樣可以確保得到正確格式的JSON字符串,它是比手工打造更乾淨。

+0

謝謝你,正如我上面提到的,擺脫了問題由這個確切的解決方案:D – Sens