2012-01-06 87 views
0

我想從PHP發送關聯數組到Javascript。但是,出於某種原因,輸出是未定義的。下面的代碼:從PHP到JavaScript使用JSON的關聯數組

PHP(虛擬的陣列):

$validationErrors = array("unregisteredName" => NULL, 
"unregisteredEmail" => "Invalid e-mail", "unregisteredUsername" => NULL, 
"unregisteredPassword" => NULL); 

$log = array("errors" => $validationErrors); 
echo json_encode($log); 

的Javascript:

var addUserCallback = function(data) { 
    if(data.errors && data.errors.length) { 
     $.each(data.errors, function(index, error) { 
      console.log(error); 
      $("#"+index).attr("placeholder", error); 
     }); 
    } 
    else { 
     window.location="https://stackoverflow.com/users/success/"; 
    } 
}; 

var errorCallback = function(xhr, status, error) { 
    console.log(arguments); 
}; 

self.addUser = function() { 
    var data = { 
     unregisteredName: $("#unregisteredName").val(), 
     unregisteredEmail: $("#unregisteredEmail").val(), 
     unregisteredUsername: $("#unregisteredUsername").val(), 
     unregisteredPassword: $("#unregisteredPassword").val() 
    }; 
    $.post(addUserUrl, data).success(addUserCallback) 
     .error(errorCallback); 
} 

這裏是我從Chrome的督察獲得:

數據:"↵{"errors":{"unregisteredName":null,"unregisteredEmail":"Invalid e-mail.","unregisteredUsername":null,"unregisteredPassword":null}}"
data.errors:Undefined

那麼,什麼情況是,即使獲得的「數據」可變數據,因爲事實上它是格式化它總是重定向到「成功」頁面。

任何想法?

+0

因爲'data'是一個字符串。您需要解析JSON字符串並首先提取您的對象。 – Crontab 2012-01-06 20:13:37

回答

6

您需要告訴jQuery解析JSON字符串。

$.post(addUserUrl, data, 'json').success(addUserCallback).error(errorCallback); 

雖然我平時的成功回調傳遞給$.post

$.post(addUserUrl, data, addUserCallback, 'json').error(errorCallback); 
+0

或者 - 實際上,當不使用jQuery AJAX時 - 查找「JSON.parse」。 – 2012-01-06 20:15:32

+2

我還建議在返回JSON時將application/json設置爲內容類型(這種方式jQuery可能能夠在沒有數據類型的情況下計算出來 - 但是兩者都會更好)。 – Daff 2012-01-06 20:15:44

+0

比我想象的更容易。我曾嘗試將「json」放在'$ .post'中,但我將成功回調傳遞給外部...可能它不理解參數。非常感謝你。 – Falassion 2012-01-06 20:24:31