繁体   English   中英

AJAX 调用错误 function 而不是成功

[英]AJAX error function invoked instead of success

我是使用 PHP 的新手。我正在实施一个 email 订阅表单,该表单包含在谷歌验证码 function 中。我正在使用 ajax 调用服务器端代码。 我遇到的问题是 ajax 中的 success() 方法在 function 正确执行时未被调用。

一些细节:第 3 方 email 订阅返回一个 json object 和一个键值对,{message: "you've been added"} 或 {message:"error,try again"}

如果我们命中 php 文件中的 else 子句,则 function 已成功运行。 发生这种情况时,它出于某种原因运行 error() 回调? 即使我的状态是 200 在此处输入图像描述

我怀疑我没有返回有效的 json 之类的东西? 提前致谢!

这是我的 JS

$(".subscribe-form").submit(function (e) {
e.preventDefault();
var form = $(this);
var formData = form.serialize();
var formAction = form.attr("action");
var formMethod = form.attr("method");
var formResponse = $("#form-response");

grecaptcha.ready(function () {
  grecaptcha
    .execute("6Lcgdq4UAAAAAFjthnpc_WQ4leumC1UmlyLk0OwR", {
      action: "submit",
    })
    .then(function (token) {
      var recaptchaResponse = document.getElementById("recaptchaResponse");
      recaptchaResponse.value = token;
      $.ajax({
        url: "/wp-content/themes/hello-elementor/submit.php",
        type: "POST",
        data: formData,
        dataType: "json",
        success: function (data) {
          console.log(data);
          if (data.error) {
            formResponse.html(data.error);
          } else {
            formResponse.html(data.success);
          }
        },
        error: function (data) {
          console.log(data);
          formResponse.html("Error, please try again");
        },
      });
    });
});

});

这是我的 sumbit.php - 出于显而易见的原因,我已经删除了这个秘密。

<?php
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$email = $_POST['email'];    
$ttrurl = "https://3rdpartysubsciptionservice/addEmailDetails.aspx?first_name=$fname&last_name=$lname&email=$email";
$url = "https://www.google.com/recaptcha/api/siteverify";
$data = [
    'secret' => "secret_code",
    'response' => $_POST['recaptcha_response'],
    'remoteip' => $_SERVER['REMOTE_ADDR']
  ];
$options = array(
    'http' => array(
      'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
      'method'  => 'POST',
      'content' => http_build_query($data)
    )
);
$context  = stream_context_create($options);
$response = file_get_contents($url, false, $context);
$res = json_decode($response, true);

// Take action based on the score returned
if ($res['success'] == false && $res['score'] <= 0.5) {
    // Score less than 0.5 indicates suspicious activity. Return an error
    $error = "Something went wrong. Please try again later";
    $output = array("error" => $error, "success" => "");
    http_response_code(400);
    echo json_encode($output);
} else {
    // This is a human. Insert the message into database OR send a mail
    $curl = curl_init();
    curl_setopt_array($curl, array(CURLOPT_URL => $ttrurl));
    $ttrres = curl_exec($curl);
    curl_close($curl);
    $message = json_decode($ttrres, true);
    $output = array("error" => "", "success" => json_encode($message));
    http_response_code(200);
    echo json_encode($output);
}

?>

请注意,您在 ajax 中设置了dataType: "json"并且您的响应似乎不是 json。在您的 php 代码之上使用此代码:

header('Content-Type: application/json; charset=utf-8');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM