2012-01-06 82 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