簡體   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