我有一个 jquery 函数,它通过 ajax 执行更新
更新成功,(我可以在 firebug 网络响应中检查),但我无法收到响应消息,(通过警报或控制台)
这是我的代码片段...
$('#mcbatchsubscribe').on('click', 'a.ajaxresub', function (e) {
e.preventDefault();
var email = $(this).attr('emailvalue');
$.ajax ({
url: '/admin/ajax/ajax_resubscribe.php',
data: {email: email},
dataType: 'json',
success: function (json) {
console.log("success", json);
//alert(json)
}
} );
} );
如果我打开 firebug,控制台什么都不返回,- 网络 header 显示正确的 ajax 路径和参数,网络响应显示 ajax 成功消息,“重新订阅成功”-ajax 页面所做的是运行一个列表在 mailchimp 上订阅电子邮件参数,这绝对有效。这是 ajax 片段...
...if ($rsemail->TotalRows > 0) { // Trigger if there is a matching row
$merge_vars = array(
'FNAME'=> $rsemail->getColumnVal("MemberFirstName"),
'LNAME'=> $rsemail->getColumnVal("MemberLastName")
);
$MailChimp = new \Drewm\MailChimp($api_key);
$subscriberesult = $MailChimp->call('lists/subscribe',
array('id' => $list_id,
'email' => array('email'=>$rsemail->getColumnVal("MemberEmail")),
'merge_vars' => $merge_vars,
'double_optin' => true,
'update_existing' => true,
'replace_interests' => false,
'send_welcome' => false
));
if ($subscriberesult ['email'] != $rsemail->getColumnVal("MemberEmail")) {
echo nl2br(($subscriberesult ['code'])."\r\n");
echo nl2br(($subscriberesult ['name'])."\r\n");
echo nl2br(($subscriberesult ['error'])."\r\n");
} else {
echo 'Resubscribed success';
}
} else {
echo 'Resubscribe failure - Email not found';
我觉得我在进步
我把success:function(json)改成了complete:function(json)
我现在明白了
对象{readyState: 4, responseText: "重新订阅成功", status: 200, statusText: "OK"}
最佳答案
问题
您的 AJAX 请求包含以下设置:
dataType: "json"
响应文本不是有效的 json
文本。当 jQuery 尝试将响应解析为 json -> 它失败并跳过 success
回调...
有关更多信息,请参阅 jQuery AJAX documentation
解决方案(一)
从您的 ajax 参数中删除 dataType:'json'
- 它会阻止 jQuery 尝试将您的响应字符串解析为 json
对象(并且失败。 ..)
或
方案二
将服务器代码中的 responseText
更改为:
"{result: 'Resubscribed success'}"
这将通过 jQuery 的 json 验证,并且您的成功
处理程序将被调用。
关于javascript - 在 ajax 成功时返回 json 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33183728/