通过AJAX从PHP接收响应

Jav*_*bra 0 javascript php ajax jquery

我正在尝试从我的网站上的表单发送信息到使用PHP脚本Ajax.但是,每次我尝试提交表单时,我都无法从服务器上的脚本返回任何响应.我不知道我错过了什么,我很感激任何帮助.

这是我的HTML:

<form method='post' action='<?= get_template_directory_uri() ?>/mailchimp.php'>
    <input type='text' name='email'/>
    <input type='submit' name='submit' value='Subscribe'/>
</form>
Run Code Online (Sandbox Code Playgroud)

这是我的PHP:

session_start();
if(isset($_POST['submit'])){
    $email = $_POST['email'];
    if(!empty($email) && !filter_var($email, FILTER_VALIDATE_EMAIL) === false){
        // MailChimp API credentials
        $apiKey = 'xxx-xxx';
        $listID = 'xxxxxxx';

        // MailChimp API URL
        $memberID = md5(strtolower($email));
        $dataCenter = substr($apiKey,strpos($apiKey,'-')+1);
        $url = 'https://' . $dataCenter . '.api.mailchimp.com/3.0/lists/' . $listID . '/members/' . $memberID;

        // member information
        $json = json_encode([
            'email_address' => $email,
            'status'        => 'subscribed'
        ]);

        // send a HTTP POST request with curl
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_USERPWD, 'user:' . $apiKey);
        curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
        $result = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        echo "<h1>Success</h1>";
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的JQuery:

jQuery('form').submit(function (event) {

   console.log('submitting...')

    //1. Get the form Data
    var formData = {
        'email': jQuery('input[name=email]').val()
    }

    console.log("DATA FROM FORM:")
    console.log(formData);

    //2. Process the form
    jQuery.ajax({
        type: 'POST', //Type of HTTP request
        url: 'mailchimp.php', //URL to POST
        data: formData //Data from form
    }).done(function (data) {
        console.log("RESPONSE: " + data);
    });

    //3. Stop the form from submitting in usual manner
    event.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)

我已经检查了我的控制台,我可以看到没有错误JS.我看到了这个:

submitting...
DATA FROM FORM:
Object {email: "xyz@domain.com"}
RESPONSE: 
Run Code Online (Sandbox Code Playgroud)

我还检查了我的网络请求,我可以看到我已经请求了PHP脚本,并且它发送了200响应,所以我正在点击脚本 - 但是我没有看到任何响应数据.

*另请注意 - 我知道在上面的PHP代码中我不检查$httpCode变量.我将实施这个.我只想先让脚本与彼此交谈.

Zak*_*rki 7

那是因为你的情况:

if(isset($_POST['submit'])){
Run Code Online (Sandbox Code Playgroud)

永远不会到达,因为你没有submitPOST你发送的请求中发送参数email.

因此,删除条件或替换它isset($_POST['email']),或者您也可以将submit参数添加到您的formData.

为了确保发送到正确路由的请求尝试注释所有代码并添加回声(例如echo "<h1>Test</h1>";)并检查是否将记录它.

希望这可以帮助.

  • @HenrikAronsson:我感谢你的评论你是DV和评论的勇敢的人,好工作兄弟.. :) (2认同)