使用AJAX时,将curl_exec转换为Mailchimp无效

险恶胡须

我已经在Wordpress中创建了一个表单,该表单使用Mailchimp API将数据发布到Mailchimp。如果我只使用常规形式,并在相应的页面上执行操作,则效果很好;所有数据均按预期方式导入。

但是,我想通过AJAX POST命令来做到这一点。我要发送的所有信息都与使用传统的张贴表单发送的信息相同,但不起作用。AJAX成功条件会触发以显示该页面已成功加载,因此该页面中一定存在无法正常工作的内容。

这是我的表格:

<div class="card full">
    <form id="mailchimp_actions" method="post" action="/ajax-curl-actions/">
        <select name="action" id="action">
            <option>Subscribe</option>
            <option>Unsubscribe</option>
            <option>Find</option>
        </select>
        <textarea name="import_data" id="import_data" placeholder="Email Address,First Name,Last Name"></textarea>
        <input type="submit">
    </form>
</div>

这是它发布到的页面:

<?php 

    // Template Name: AJAX - cURL actions.

    $subscribers = bfm_data_format($_POST);

    $final_report = array('successes'=>0,'failures'=>array());

    foreach($subscribers as $subscriber) :
        $post_data = array('email' => $subscriber[0], 'fname' =>  $subscriber[1], 'lname' =>  $subscriber[2]);
        $action = $_POST['action'];
        if(!bfm_subscriber_exists($subscriber[0]) && $action=='Subscribe') $action = 'Add New Subscriber';
        $report = bfm_curl_actions(bfm_list_id(),bfm_api_key(),$post_data,$action);     
        if($report['success']) :
            $final_report['successes']++;   
        else:
            $final_report['failures'][] = $report['error'];
        endif;
    endforeach;

?>

<h1>Import Completed</h1>
<p><?=$final_report['successes']?> records were imported successfully.</p>
<h2>Failed imports</h2>
<table>
    <tr>
        <th>Email</th>
        <th>Reason</th>
    </tr>
    <?php foreach($final_report['failures'] as $failure): ?>        
        <tr>
            <td><?=$failure['email']?></td>
            <td><?=$failure['message']?></td>
        </tr>
    <?php endforeach; ?>
</table>

以下是使其起作用的各种功能:

<?php   

    function bfm_fudge_timeout(){

        $wpmetetxt = "
        # WP Maximum Execution Time Exceeded
        <IfModule mod_php5.c>
            php_value max_execution_time 10000
        </IfModule>";


        $htaccess = ABSPATH .'/.htaccess';
        $contents = @file_get_contents($htaccess);
        if(!strpos($htaccess,$wpmetetxt))
        file_put_contents($htaccess,$contents.$wpmetetxt);
    }


    add_action("after_switch_theme", "bfm_fudge_timeout");

    // Format data

    function bfm_data_format($data) {
        $import_data = $data['import_data'];
        $import_data_lines = explode("\n",$import_data);
        $i=0;
        foreach($import_data_lines as $import_data_line) :
            $import_data_lines[$i] = explode(',',$import_data_line);
            $i++;
        endforeach;
        return $import_data_lines;
    }

    // MailChimp data manipulation  

    function bfm_curl_actions($list_id,$api_key,$post_data,$action) {

        $auth = base64_encode( 'user:'.$api_key );

        $data = array(
            'apikey'        => $api_key,
            'email_address' => $post_data['email'],
            'merge_fields'  => array(
            'FNAME' => $post_data['fname'],
            'LNAME' => $post_data['lname'],
            )
        );

        if($action == 'Subscribe' || $action == 'Add New Subscriber') :
            $data['status']='subscribed';
        elseif($action == 'Unsubscribe'):
            $data['status']='unsubscribed';
        endif;

        $member_id = md5($post_data['email']);

        $json_data = json_encode($data);

        $ch = curl_init();

        $curlopt_url = "https://us7.api.mailchimp.com/3.0/lists/$list_id/members/";
        if($action!='Add New Subscriber') $curlopt_url.=$member_id; // Member ID needs to be excluded if adding an entirely new person.
        curl_setopt($ch, CURLOPT_URL, $curlopt_url);
        if($action == 'Subscribe' || $action == 'Unsubscribe' || $action == 'Update') : 
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PATCH");
        endif;
        if($action == 'Find'):
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
        endif;
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json',
            'Authorization: Basic '.$auth));
        curl_setopt($ch, CURLOPT_USERAGENT, 'PHP-MCAPI/3.0');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);

        $result = curl_exec($ch);
        $status = "undefined";
        $msg = "";
        $myArray = json_decode($result, true);

        foreach($myArray as $key => $value)
        {

            if( $key == "status" )
            {
                $status=$value;             
            }
            else if ($key == "title")
            {
                $msg=$value;                
            }       

        }

        $email = $post_data['email'];

        if($action == 'Subscribe' || $action == 'Add New Subscriber'): 
            if($status == "subscribed") :
                $report = array ('success'=>true,'error'=>'');
            else: 
                $report = array ('success'=>false,'error'=>array('email'=>$email,'message'=>$msg));
            endif;          
        endif;

        return $report;     

    }


    function bfm_subscriber_exists($email) {

        $api_key = bfm_api_key();
        $list_id = bfm_list_id();

        $auth = base64_encode( 'user:'.$api_key );

        $data = array(
            'apikey'        => $api_key,
            'email_address' => $email,
        );

        $member_id = md5($email);

        $json_data = json_encode($data);

        $ch = curl_init();

        $curlopt_url = "https://us7.api.mailchimp.com/3.0/lists/$list_id/members/$member_id";

        curl_setopt($ch, CURLOPT_URL, $curlopt_url);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json',
            'Authorization: Basic '.$auth));
        curl_setopt($ch, CURLOPT_USERAGENT, 'PHP-MCAPI/3.0');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);

        $result = json_decode(curl_exec($ch),true);

        if ($result['status']=='404') return false;

        return true;

        die(' '); // Free up memory.

    }
    ?>

以上所有作品。这是我试图通过AJAX使用的jQuery,但失败了。

// MailChimp Functions

$(document).on("submit","#mailchimp_actions", 
    function(event) {
        event.preventDefault();
        var import_data = $('#action').val();
        var action = $('#import_data').val();

        $.post("/ajax-curl-actions/",
            {   
                import_data: import_data,
                action: action
            },
            function () {
                alert("All done!");
            }
        );  
    }
);
险恶胡须

解决了!我已经在AJAX请求中转换了两个变量:

 var import_data = $('#action').val();
 var action = $('#import_data').val();

本来应该:

 var import_data = $('#import_data').val();
 var action = $('#action').val();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Ajax将JavaScript变量转换为PHP无效

来自分类Dev

使用python将jpg转换为pdf时旋转无效

来自分类Dev

为什么在使用curl_exec($ curl)之后$ status = 0?

来自分类Dev

为什么在使用curl_exec($ curl)之后$ status = 0?

来自分类Dev

将cURL命令转换为ajax

来自分类Dev

将curl cmd转换为jQuery $ .ajax()

来自分类Dev

将curl代码转换为ajax

来自分类Dev

将CURL转换为AJAX请求

来自分类Dev

将curl cmd转换为jQuery $ .ajax()

来自分类Dev

将cURL命令转换为ajax

来自分类Dev

curl_exec尝试连接到URL时返回false

来自分类Dev

在使用json_encode将数组转换为json时,没有让Json无效的

来自分类Dev

PHP curl_exec返回空

来自分类Dev

Curl_exec在PHP中返回null

来自分类Dev

curl_exec无法正常工作

来自分类Dev

curl_exec判断超时原因

来自分类Dev

curl_exec()需要参数1

来自分类Dev

curl_exec返回无错误的空白

来自分类Dev

curl_exec识别超时原因

来自分类Dev

PHP while 循环 curl_exec

来自分类Dev

如何将curl_exec结果保存到Laravel中的变量中

来自分类Dev

使用无效的节点名称将JSON转换为XML

来自分类Dev

将cURL转换为翻新

来自分类Dev

将Curl转换为Java

来自分类Dev

将curl转换为python

来自分类Dev

将 CURL 转换为 Swift

来自分类Dev

使用数据透视表将文本行数据转换为1和0的列时,列无效

来自分类Dev

在Python中使用multipart / mixed将curl转换为请求

来自分类Dev

使用--form将curl转换为python请求