javascript - 在 ajax 成功时返回 json 消息

标签 javascript jquery json ajax

我有一个 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/

相关文章:

javascript - $(window).width() 在 IE9 中不起作用

javascript - 在html5中将图像颜色更改为灰度

arrays - JQ:将对象数组减少为对象,添加到数组

javascript - 如何列出 Typeahead.js 和/或 Bloodhound 引擎的对象?

PHP - 将 Unicode 数据插入正确格式的 MYSQL

javascript - 端口转发路由器监听家用电脑上的 node.js 服务器

javascript - 页面重叠在页脚 div 上

javascript - 以编程方式解析 html 字符串而不附加到 DOM 的最佳方法

javascript - Webpack 更改特定包的导入路径

javascript - 问 - React Native App 介绍中的路由