将表单发布到Salesforce时出现CORB错误

时间:2019-02-27 12:22:54

标签: javascript cors salesforce fetch cross-origin-read-blocking

我们正在使用基于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,但仍然不愉快。

在此问题上的任何帮助将不胜感激。

有人对此有任何经验吗?

0 个答案:

没有答案