2015-12-24 41 views
2

當我在獲取輸入值時嘗試訪問ajax外部的對象屬性時,它返回正確的值。但是當我嘗試在成功函數內部記錄並追加該值時,它將返回undefined。我該如何解決這類問題?看來這個對象是本地的,不能被ajax訪問?以下是我的代碼。使用Ajax打印對象屬性時未定義的結果Jquery

$('#add-order').on('click',function(){ 

    //create an object for orders 
    var order = { 

     name : $('#name').val(), 
     drink : $('#drink').val() 
    }; 

    $.ajax({ 
     url : 'api/orders.json', 
     type : 'POST', 
     data : order, 
     dataType : 'json', 
     success : function(newOrder){ 
      console.log(newOrder.name); 
      $('#orders').append('<li>' + newOrder.name + ' : ' + newOrder.drink + '</li>'); 
     }, 
     error: function(){ 
      console.log('error connecting'); 
     } 
    }); 

}); 

這裏的index.html的

<h4>Add a Coffee Order</h4> 
<ul id="orders"> 

</ul> 

<p><input type="text" id="name"></p> 

<p><input type="text" id="drink"></p> 

<button type="submit" id="add-order">Add</button> 

因爲我需要我用PHP的服務器端語言。但是我無法使用JSON.stringify方法編寫來自ajax的數據。

<?php 

    if (isset($_POST['submit'])) { 
     $orders = $_POST['data']; 
     $orderFile = fopen('api/orders.json', 'w'); 

     fwrite($orderFile, $orders); 
     fclose($orderFile); 
    } 

我也更新了我的top.When我硬編碼任何字符串使用fwrite($ orderFile,「我的訂單」),它會在orders.json寫然而,當我用它不工作的$命令代碼。我在這裏錯過了什麼嗎?

回答

3

newOrder是由AJAX調用返回的JSON,它可以根據你在做什麼目前存在的鑰匙,如果你要打印的order對象,然後做

$('#orders').append('<li>' + order.name + ' : ' + order.drink + '</li>'); 
+0

啊得到了它。是的,這就是爲什麼當我登錄newOrder時,它會返回數據。非常感謝。但是最後一個問題是,我在輸入中輸入的值是否會寫入order.json文件?如果不是,我會怎麼做呢? –

+0

輸入在哪裏? – void

+0

@JayGorio:好吧,它可能被寫入json文件。這就是服務器需要做的事情,您可以在客戶端完成的任務是通過POST請求將數據傳遞到服務器。 – Bergi

0

但是當我嘗試登錄並在返回undefined的成功函數內附加該值。

這是因爲你的json文件orders.json或服務器端代碼的邏輯。在返回的json newOrder成功回調中,對象將不會有密鑰name/drink,導致undefined中的原因。

那麼,事情是你必須從服務器端指定鍵,這應該是這樣的回報吧:

{ "name":"Mango", "drink":"shake" }