我们正在使用基于WebForms的Kentico CMS开发一个新网站。 我们需要将许多Salesforce表单集成到站点中,但是由于站点是WebForms,因此页面上只能有一个表单。为了解决这个问题,我们正在使用Javascript发布表单。
以下是我们正在使用的JS代码:
document.addEventListener('submit', e => {
const form = document.activeElement.closest('[data-action]');
// Not an ajax form so return
if( !form ) return;
e.preventDefault();
const action = form.dataset.action;
const elements = Array.from( form.querySelectorAll('select, input, textarea') );
if( typeof form.dataset.validate !== 'undefined' ) {
const hasErrors = validate.hasErrors( elements );
if( hasErrors ) return;
}
// Serialize data
const formData = elements.map( element => {
return encodeURIComponent(element.name) + '=' + encodeURIComponent( element.value )
}).join('&');
// Send!
fetch( action, {
method: "POST",
mode: "no-cors",
cache: "no-cache",
headers: {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
},
body: formData
})
.then(response => {
const errorMsg = form.parentNode.querySelector('.js-ajaxSubmitError');
const successMsg = form.parentNode.querySelector('.js-ajaxSubmitSuccess');
if (!response.ok) {
console.error(response.statusText);
if( errorMsg ) showMessage( errorMsg );
} else if ( successMsg ) {
form.style.display = 'none';
showMessage( successMsg );
window.scroll({
top: successMsg.current.getBoundingClientRect().top + window.scrollY,
behavior: 'smooth'
});
}
return response;
})
.catch(error => console.error(`Fetch Error:\n`, error));
此代码很好用,并将数据发布到Salesforce端点,但是,我们应该从端点收到响应,以确认请求成功还是失败。这就是我们遇到CORB(跨源响应阻止)问题的地方。
Chrome中显示以下消息:
Cross-Origin Read Blocking (CORB) blocked cross-origin response --URL HERE --. See https://www.chromestatus.com/feature/5629709824032768 for more details.
在Opera中,我们可以获得更多细节:
Cross-Origin Read Blocking (CORB) blocked cross-origin response --URL HERE -- with MIME type text/html. See https://www.chromestatus.com/feature/5629709824032768 for more details.
控制远程服务器的人员向我们保证,我们的IP和我们的域实际上已在其CORS设置中列入了白名单,并被允许访问其服务器上的资源,但是据我所知,在这种情况下,它正在接受我们的请求但这是不允许的回应。
我们甚至尝试临时向我们的Azure实例上的所有人开放CORS,但仍然不愉快。
在此问题上的任何帮助将不胜感激。
有人对此有任何经验吗?