javascript - 通过 AJAX 接收 PHP 的响应

标签 javascript php jquery ajax

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

这是我的HTML:

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

这是我的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>";
    }
}

这是我的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();
});

我检查了控制台,发现 JS 没有错误。我看到这个:

submitting...
DATA FROM FORM:
Object {email: "xyz@domain.com"}
RESPONSE: 

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

*另请注意 - 我知道在上面的 PHP 代码中我没有检查 $httpCode 变量。我将实现这一点。我只想让脚本先互相交谈。

最佳答案

发生这种情况是因为您的情况:

if(isset($_POST['submit'])){

永远不会到达,因为您没有发送 submit POST 中的参数请求您仅发送 email .

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

To make sure that the request sent to the right route try to comment all the code and add an echo (e.g echo "<h1>Test</h1>";) and check if it will be logged.

希望这有帮助。

关于javascript - 通过 AJAX 接收 PHP 的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40127419/

相关文章:

php - 设置 session 变量

jquery - 高度 : 100% won't keep ratio of image

javascript - onclick 添加图片到div

php - 适用于 Windows 的 PHP 与适用于 Linux、Mac 等的一样吗?

javascript - 使用 onchange 获取选择的值并添加行 ID 号

php - elseif 与 else if 之间的根本区别

javascript - HTML 文本输入仅允许数字输入

javascript - 解析 json 并将其存储在数组中?

javascript - 谷歌 "change background image"链接如何工作?

javascript - 使用循环在事件监听器上传递参数