【问题标题】:Mailchimp API getting error and can't use ajax successMailchimp API 出现错误,无法使用 ajax 成功
【发布时间】:2014-02-24 19:45:34
【问题描述】:

我在从 mailchimp API V2.0 获取正确响应时遇到问题。

当我尝试订阅新用户时

var arr = {
           apikey:"xxxx",
           id:"secretListId",
           email:{
                  email:"jd@example.com"
                 },
           double_optin:"false"
          }

function jsonpCallback (){
       alert("jsonpCallback");
    };

$.ajax({
      type: 'GET',
      url: 'https://us6.api.mailchimp.com/2.0/lists/subscribe.json',
      dataType: 'jsonp',
      jsonpCallback: 'jsonpCallback',
      data: arr,
      timeout: 4000,
      cache: false,
      async: false, success: function(data, textStatus, jqXHR) {
        alert('success: '+data);
      },
      error: function(jqXHR, textStatus, errorThrown){
        alert('error: '+JSON.stringify(jqXHR));
      },
      complete: function(jqXHR, textStatus){
        alert('complete: '+JSON.stringify(jqXHR));
      }       
    }).success(function(rsp){
        console.log('success: '+rsp);
    }).fail(function(xhr,error,thrownError){
        console.log('fail  status:[' + xhr.status + ']  error:[' + thrownError + ']');
    }).always(function(){
        console.log('complete');
    });
});

在检查器中我收到错误 500。

并在弹出警报中

在此弹出窗口中应该有另一条消息(错误 500)。

但是当我通过这个链接到浏览器时,我得到:

{
"status": "error",
"code": 214,
"name": "List_AlreadySubscribed",
"error": "jd@example.com is already subscribed to list mpowroznik.com List. Click here to update your profile."

}

当然,如果我添加新电子邮件,我会收到弹出警报

为什么这是错误,而不是成功?

我只使用没有 PHP 或其他语言的 jQuery。

函数 jsonpCallback 根本不执行。

我必须做什么,才能得到正确的响应信息。

【问题讨论】:

  • 您收到的错误表明您使用的 api 不正确。根据检查器,该 api 返回 500 错误。
  • blog.mailchimp.com/mailchimps-api-v2/#restful 如果有错误,他们总是返回 500。但在弹出窗口中我只能看到 404。
  • 如果它返回一个 500 那么这就是为什么它会去错误回调...
  • 我明白了。您错误地使用了 jsonp。你不应该定义一个名为 jsonpCallback 的函数,jquery 会为你做这件事。如果您想定义自己的回调,则需要使用 getScript。
  • 我也开始觉得这个 api 不支持 JSONP,这与 NEVER USING AN API KEY ON THE CLIENT 的想法是一致的,因为客户端可以看到/窃取它,允许任何使用使用此请求的页面的人窃取您的邮件列表。

标签: javascript jquery ajax api mailchimp


【解决方案1】:

出于特定原因,此 API 不打算由浏览器中的代码使用。

通过在浏览器中发出此请求,任何使用发出此请求的页面的人都可以获取您的 api 密钥并像您一样向 api 发出自己的请求,从而允许任何人窃取所有添加到列表中的电子邮件地址(甚至清空列表。)

您必须使用服务器端语言(例如 PHP)与此 api 交互。否则会损害您的用户/客户的安全。

【讨论】:

  • 你完全正确!现在我用它来学习!我想知道为什么它不能按我的意愿工作。哪段代码错了,或者一切都错了,我应该尝试以其他方式编写。当我在添加新用户期间收到 API 的响应时,我也会收到错误警报:(
  • 那是因为服务没有返回 jsonp,而您要求它返回。它永远不会返回 jsonp。由于它不支持 JSONP 或 CORS,因此无法使用客户端代码执行此操作。
【解决方案2】:
function jsonpCallback(data){
        alert(JSON.stringify(data[1]));
        return data;
    }

$.ajax({
    type: 'POST',
    url: 'http://xxx.us6.list-manage.com/subscribe/post-json?u=copiedFromActionForm&id=idList&c=?',
    data: data,
    cache: false,
    dataType: 'jsonp',
    success: function(data, text, xhr){
        alert(JSON.stringify(data.msg));

    },
    error: function (xhr, text, error) {
        console.log('error')
        console.log(JSON.stringify(xhr.msg));
    }
  });

在警报弹出窗口中,您将收到消息。

来自https://github.com/scdoshi/jquery-ajaxchimp的解决思路

【讨论】:

  • JSONP + POST 没有意义。否则,如果您纠正了这种歧义,这可能是正确的方法。
猜你喜欢
  • 2019-03-20
  • 2014-05-26
  • 2017-08-16
  • 2014-07-10
  • 2022-06-21
  • 2016-08-15
  • 2014-10-30
  • 2021-10-28
  • 1970-01-01
相关资源
最近更新 更多