我将一个多维数组传递给AJAX成功函数,如下所示:
$response = array();
$response['message']['name'] = $name;
$response['message']['phone'] = $phone;
echo json_encode( $response );
die();
现在我有问题访问这些数据使用jQuery。我试过使用以下方式输出数据,这在Chrome中奇怪地工作,但在FireFox, IE, Safari或Chrome手机中却不行。
jQuery( '#message' ).html( data.message.name );
控制台显示TypeError: data.message is undefined
希望有人能帮助让我知道我哪里错了。
我的AJAX调用和成功函数:
jQuery.ajax({
type: 'POST',
url: ajax_url,
dataType: 'json',
cache: false,
data: {
'action': 'quote',
'security': security,
'name': name,
'phone': phone,
},
success:function(data) {
if ( data.message.name == 'Ben' ) {
jQuery( '#message' ).html( data.message.name );
} else {
// do nothing
}
},
UPDATE:我将问题定位到WordPress。具体来说,wp_ajax_nopriv_(action)
必须在未登录的用户执行时使用。我使用的只是wp_ajax_(action)
,它只对登录用户执行。注意,我是使用Chrome登录的,而不是使用FF, IE和Safari登录的,这完全解释了为什么我在使用这些浏览器时看到未定义的控制台消息。
裁判:http://codex.wordpress.org/AJAX_in_Plugins
用以下行扩展PHP代码,将JSON头发送到检索数据:
header('Content-type: application/json');
你试过跟随吗?
data['message']['name'];
也尝试用
输出data
变量console.log(data);
来确定它是一个数组还是一个对象。
在您的浏览器端开发工具中,您可能会发现network
选项卡。它将向您显示带有错误、请求和响应数据的AJAX请求…
您是否尝试过实现这样的错误处理程序?
jQuery.ajax({
...
}).fail(function(jqXHR, textStatus, errorThrown) {
console.log(jqXHR, textStatus, errorThrown);
});
来自文档:
jqXHR。fail(function(jqXHR, textStatus, errorThrown) {});
错误回调选项的另一种构造,.fail()方法取代了已弃用的.error()方法。参考deferred.fail()获取实现细节。