спасибо, что нашли время проверить мой вопрос.
По какой-то причине один из моих CORS-Post-Requests не прошел, и я не могу определить причину этого. Поскольку я не нашел проблему, я создаю вторую более простую функцию, которая работает безупречно.
Ниже приведены оба примера:
Я создал простую пользовательскую форму для регистрации пользователей в Mailchimp, запустив следующий запрос POST:
async function addUserToMailchimp(){
return jQuery.getJSON("https://api.ipify.org?format=json")
.then(data => {return jQuery.getJSON("https://ipapi.co/"+data.ip+"/json/")})
.then(locationData => {return {
city: locationData.city,
region: locationData.region
}}).then(locationData => {
var email = document.getElementById("email").value;
var interesse = document.getElementById("interesse").value;
var typ = jQuery('.selectpicker').val();
var city = locationData.city;
var region = locationData.region;
var data = {
email: email,
interesse: interesse,
typ: typ,
stadt: city,
region: region
};
console.log(typeof data);
console.log(data);
jQuery.post({
type: "POST",
method: "POST",
crossDomain: true,
dataType: "json",
url: "GOOGLECLOUDFUNCTION-URL",
data: data,
success: function(data){
console.log(data)
}
})
}
)
};
jQuery('#MailchimpSignup').submit(function (e) {
e.preventDefault();
addUserToMailchimp();
});
Облачная функция Google выполняет следующие действия:
import google.cloud.logging
client = google.cloud.logging.Client()
client.setup_logging()
import logging
from mailchimp3 import MailChimp
import os
from flask_cors import CORS, cross_origin
@cross_origin(origins="*")
def MailchimpSignUp(request):
User = os.environ.get('User', 'Specified environment variable is not set.')
API_Key = os.environ.get('API_Key', 'Specified environment variable is not set.')
client = MailChimp(mc_user=User, mc_api=API_Key)
try:
logging.info(request.values)
data = request.values
email = data["email"]
interesse = data["interesse"]
typ = data["typ"]
stadt = data["stadt"]
region = data["region"]
res_m = client.lists.members.create("LIST_ID", {
'email_address': email,
'status': "subscribed",
'merge_fields': {
'INTERESSE': interesse,
'TYP': typ
'STADT': stadt,
'REGION': region
},
})
logging.info(res_m)
return {"mailchimp_result":res_m}
except Exception as e:
logging.error(RuntimeError('Error Test', e))
результат:
Access to XMLHttpRequest at 'GOOGLECLOUDFUNCTION-URL' from origin 'http://localhost:63342' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
VM6:1 POST GOOGLECLOUDFUNCTION-URL net::ERR_FAILED
Подобно этому, я создал другую тестовую функцию, для которой POST-запрос работал отлично. Для этой функции я использовал тот же Python пакет, то есть flask_cors, чтобы добавить необходимые заголовки.
См. Пример ниже:
var data = {
header_customer_group: user_group,
header_message: notificaiton_body,
header_password: password
};
console.log(typeof data);
console.log(data);
jQuery.post({
type: "POST",
method: "POST",
crossDomain: true,
dataType: "json",
url: "GOOGLECLOUDFUNCTION-URL",
data: data,
success: function(data){
console.log(data)
}
})
со следующим кодом функции Google Cloud:
from flask_cors import CORS, cross_origin
import google.cloud.logging
client = google.cloud.logging.Client()
client.setup_logging()
import logging
@cross_origin(origins="*")
def send_notification(request):
try:
data = request.values
password = data["header_password"]
return {"password":password}
except Exception as e:
logging.error(RuntimeError('Error Test', e))
Результат:
{password: "test"}
Видите ли вы причину, по которой один работает, а другой не работает. Это держало меня часами, часами и часами, и я просто, кажется, упускаю главное.
Спасибо за вашу помощь! Высоко ценим это! Лучший ~