Javascript Ajax请求未完成

Javascript Ajax请求未完成,javascript,php,jquery,ajax,api,Javascript,Php,Jquery,Ajax,Api,我正在制作一个订阅时事通讯的表单,为此我使用ajax请求调用mailchimp api。api单独工作很好,我已经测试过了。 但在ajax代码中,我在beforeSend和complete一节中警告说,它是正确的,但在成功的情况下,它什么也没做 这是我的密码: HTML表单代码 <form id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate"> <input

我正在制作一个订阅时事通讯的表单,为此我使用ajax请求调用mailchimp api。api单独工作很好,我已经测试过了。 但在ajax代码中,我在beforeSend和complete一节中警告说,它是正确的,但在成功的情况下,它什么也没做

这是我的密码:

HTML表单代码

<form id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate">
    <input type="email" value="" name="EMAIL" class="email" id="useremail" placeholder="Type our mail address" required>
    <input type="button" value="subscribe" name="subscribe" id="mc-embedded-subscribe" class="mc-button" >
      <div id="subscribe-result">
      </div>
</form>
<script>
$("#mc-embedded-subscribe").click(function() { 

var email = $('#useremail').val();

$.ajax({
    type: 'post',
    url: "newslatter.php", 
    dataType: 'json',
    data: 'useremail='+email,
    beforeSend: function() {
    },
    complete: function() {
    },  
    success: function(data)
    {
        alert("enter success");
        if(data.type == 'error')
        {
            output = "<a color='red'>"+data.text+"</div>";
        }else{
            output = data.text;
        }
        $("#subscribe-result").html(output);
    }
});
});
</script>

脚本代码

<form id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate">
    <input type="email" value="" name="EMAIL" class="email" id="useremail" placeholder="Type our mail address" required>
    <input type="button" value="subscribe" name="subscribe" id="mc-embedded-subscribe" class="mc-button" >
      <div id="subscribe-result">
      </div>
</form>
<script>
$("#mc-embedded-subscribe").click(function() { 

var email = $('#useremail').val();

$.ajax({
    type: 'post',
    url: "newslatter.php", 
    dataType: 'json',
    data: 'useremail='+email,
    beforeSend: function() {
    },
    complete: function() {
    },  
    success: function(data)
    {
        alert("enter success");
        if(data.type == 'error')
        {
            output = "<a color='red'>"+data.text+"</div>";
        }else{
            output = data.text;
        }
        $("#subscribe-result").html(output);
    }
});
});
</script>

$(“#mc embedded subscribe”)。单击(函数(){
var email=$('#useremail').val();
$.ajax({
键入:“post”,
url:“newslater.php”,
数据类型:“json”,
数据:“useremail=”+电子邮件,
beforeSend:function(){
},
完成:函数(){
},  
成功:功能(数据)
{
警报(“输入成功”);
如果(data.type=='error')
{
输出=“数据.文本+”;
}否则{
输出=data.text;
}
$(“#订阅结果”).html(输出);
}
});
});
下面是NewsLater的PHP代码

<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST') {

//check if its an ajax request, exit if not
if (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {

    //exit script outputting json data
    $output = json_encode(
            array(
                'type' => 'error',
                'text' => 'Request must come from Ajax'
    ));

    die($output);
}

//check $_POST vars are set, exit if any missing
if ( !isset($_POST["useremail"]) ) {
    $output = json_encode(array('type' => 'error', 'text' => 'Input fields are empty!'));
    die($output);
}

//Sanitize input data using PHP filter_var().
$useremail = filter_var(trim($_POST["useremail"]), FILTER_SANITIZE_EMAIL);

//additional php validation

if (!filter_var($useremail, FILTER_VALIDATE_EMAIL)) { //email validation
    $output = json_encode(array('type' => 'error', 'text' => 'Please enter a valid email!'));
    die($output);
}
$list_id = '***secret***';
$api_key = '***secret***';


$data_center = substr($api_key,strpos($api_key,'-')+1);

$url = 'https://'. $data_center .'.api.mailchimp.com/3.0/lists/'. $list_id .'/members';

$json = json_encode([
    'email_address' => $email,
    'status'        => 'subscribed', //pass 'subscribed' or 'pending'
]);


$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERPWD, 'user:' . $api_key);
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_POST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
$result = curl_exec($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);


if ($status_code!=200) {
    $output = json_encode(array('type' => 'error', 'text' => 'Something Went Wrong'));
    die($output);
} else {
    $output = json_encode(array('type' => 'message', 'text' => 'Hi ' . $username . ' Thank you for your email'));
    die($output);
}





?>
“错误”,
“text'=>“请求必须来自Ajax”
));
模具(产量);
}
//检查是否设置了$\u POST变量,如果缺少,请退出
如果(!isset($\u POST[“useremail”])){
$output=json_encode(数组('type'=>'错误,'text'=>'输入字段为空!');
模具(产量);
}
//使用PHP filter_var()清理输入数据。
$useremail=filter\u var(trim($\u POST[“useremail”]),filter\u SANITIZE\u EMAIL);
//附加php验证
如果(!filter\u var($useremail,filter\u VALIDATE\u EMAIL)){//EMAIL validation
$output=json_encode(数组('type'=>'错误','text'=>'请输入有效的电子邮件!'));
模具(产量);
}
$list_id='***秘密***';
$api_key='***秘密***';
$data_center=substr($api_key,strpos($api_key,“-”)+1);
$url='https://'$数据中心“.api.mailchimp.com/3.0/lists/”$列出id.'/members';
$json=json\U编码([
“电子邮件地址”=>$email,
'status'=>'subscribed',//通过'subscribed'或'pending'
]);
$ch=curl\u init($url);
curl_setopt($ch,CURLOPT_USERPWD,'user:'。$api_key);
curl_setopt($ch,CURLOPT_HTTPHEADER,['Content-Type:application/json']);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_超时,10);
卷曲设置($ch,卷曲设置桩,1);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_POSTFIELDS,$json);
$result=curl\u exec($ch);
$status\u code=curl\u getinfo($ch,CURLINFO\u HTTP\u code);
卷曲关闭($ch);
如果($status_code!=200){
$output=json_encode(数组('type'=>'错误','text'=>'出错]);
模具(产量);
}否则{
$output=json_encode(数组('type'=>'消息','text'=>'你好'。$username.'谢谢您的电子邮件');
模具(产量);
}
?>
添加

在php中发送json响应之前

在文件的和处还需要一个大括号“}”,以关闭块

if ($_SERVER['REQUEST_METHOD'] == 'POST') {

这方面有一个问题

$json = json_encode([
    'email_address' => $email,
    'status'        => 'subscribed', //pass 'subscribed' or 'pending'
]);
变量名是$useremail,而不是$email,因此将其更改为

 $json = json_encode([
        'email_address' => $useremail,
        'status'        => 'subscribed', //pass 'subscribed' or 'pending'
    ]);
新字母代码:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    //check if its an ajax request, exit if not
    if (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
        //exit script outputting json data
        $output = json_encode(
            array(
                'type' => 'error',
                'text' => 'Request must come from Ajax'
            ));
        die($output);
    }
    //check $_POST vars are set, exit if any missing
    if ( !isset($_POST["useremail"]) ) {
        $output = json_encode(array('type' => 'error', 'text' => 'Input fields are empty!'));
        die($output);
    }
    //Sanitize input data using PHP filter_var().
    $useremail = filter_var(trim($_POST["useremail"]), FILTER_SANITIZE_EMAIL);
    //additional php validation
    if (!filter_var($useremail, FILTER_VALIDATE_EMAIL)) { //email validation
        $output = json_encode(array('type' => 'error', 'text' => 'Please enter a valid email!'));
        die($output);
    }
    $list_id = '***secret***';
    $api_key = '***secret***';
    $data_center = substr($api_key,strpos($api_key,'-')+1);
    $url = 'https://'. $data_center .'.api.mailchimp.com/3.0/lists/'. $list_id .'/members';
    $json = json_encode([
        'email_address' => $useremail,
        'status'        => 'subscribed', //pass 'subscribed' or 'pending'
    ]);
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_USERPWD, 'user:' . $api_key);
    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_POST, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
    $result = curl_exec($ch);
    $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if ($status_code!=200) {
        $output = json_encode(array('type' => 'error', 'text' => 'Something Went Wrong'));
        die($output);
    } else {
        $output = json_encode(array('type' => 'message', 'text' => 'Hi ' . $username . ' Thank you for your email'));
        die($output);
    }
}

控制台上有错误吗?您是否尝试添加一个错误回调并检查
textStatus
参数?先生,控制台中没有错误。我在上面说过,我在所有部分中尝试了警报,它在任何地方都有效左成功部分,正如我所说,尝试添加一个错误回调,如果它确实检查了
textStatus
argumentsir错误回调也没有响应,并且控制台中没有任何内容,则查看它是否在那里触发;在beforeSend回调中。beforeSend:function(){return true;}no sir没有发生任何事情,也没有给出任何错误。它在完整部分抛出此错误:
(!)解析错误:语法错误,第68行的C:\wamp\www\trademark\newslater.php中出现意外的文件结尾,因为文件中存在右括号错误。更新了上面的代码。它在我的本地工作得很好