【问题标题】:JSONP Ajax Error Jquery(Number String) Not Called未调用 JSONP Ajax 错误 Jquery(数字字符串)
【发布时间】:2015-10-19 19:37:29
【问题描述】:

自从将我的网站移至 https 后,mailchimp api 不再适用于标准的 json ajax 调用。这些调用现在呈现同源策略错误。我不知道为什么会这样,因为我在我自己的服务器上调用一个 url。经过一番调查,我推测 JSONP 是我唯一的选择。以下脚本正确发布到 mailchimp 但我无法获得成功的响应。

    $.ajax({
    type:"GET",
    url:"https://mysite/book_subscription_process.php?jsonp=?",
    data:{fname: $('#fNBookId').val(), lname: $('#lNBookId').val(), email: $('#eBookId').val()},//only input
    dataType: "jsonp",
    cache: false,
    async: false,
    jsonp: false,
    success: function(data){
    console.log('success');
    if(data.message == 'failure')
    {
     alert('Error','There was an error processing your subscription. Please try again.');
    }else if(data.message == 'success')
    {
       alert('success');
    }else{
     console.log(data.message);
    } 
        },
     error: function (xhr, ajaxOptions, thrownError, data) {
    // console.log(data.message);
  console.log('failure');
    alert(xhr.status);
    alert(thrownError);
  }

    });

服务器端:

     <?php
     header("content-type: text/javascript"); 
     if(isset($_GET['jsonp']))
     {
        $obj->fname = $_GET['fname'];
        $obj->lname = $_GET['lname'];
        $obj->email = $_GET['email'];
        $obj->success = 'success';
        $obj->failure = 'failure';

    }
    header("Content-type: application/json");  


   $MailChimp = new \Drewm\MailChimp($api_key);

   $book = array('id' => $group_id, 'groups' => array('Book'));

   $merge_vars = array('FNAME'=> $obj->fname, 
   'LNAME'=>$obj->lname,
   'GROUPINGS'=>array($book)
    );

    $result = $MailChimp->call('lists/subscribe', array(
    'id'                => $list_id,
    'email'             => array('email'=>$obj->email),
    'merge_vars'        => $merge_vars,
    'double_optin'      => false,
    'update_existing'   => true,
    'replace_interests' => false,
    'send_welcome'      => false,
    ));
    if ( ! empty( $result['leid'] ) ) {
   echo json_encode($obj->success);
   }
  else{
  echo json_encode($obj->failure);
   }

  ?>

正如我上面所说,信息已正确发布到 mailchimp。然而,每次,ajax 调用都会出错。我得到了 200 OK 但没有调用 Jquery[bunch of numbers]。 json_encode 成功语句在服务器上执行。有没有我应该处理服务器端响应的特殊方法?还是我应该在客户端做一些不同的事情?提前致谢。

【问题讨论】:

    标签: php jquery ajax jsonp mailchimp


    【解决方案1】:

    Same Origin 意味着发出请求的页面和目标服务器需要具有相同的协议、服务器和端口。对于这种特殊情况,MailChimp 不是其中任何一种——发出请求的页面是您的 HTML 页面,而服务器是 https://mysite/book_subscription_process.php

    既然你说这对应于你转向 HTTPS,我猜你已经移动了一端,但没有移动另一端。由于上面的代码看起来像前端页面调用https://mysite,我会三重检查以确保HTML 和所有脚本也从https://mysite 提供。

    我认为在这种情况下您不需要 JSONP —— 听起来您正试图从同一来源工作,您只需要确保您正确地执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-04
      • 2011-08-07
      • 2014-02-05
      • 2015-01-03
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 2012-10-08
      相关资源
      最近更新 更多