需要有关访问控制-允许-来源的帮助

时间:2016-03-10 作者:Nick

我有一个小问题,我用网站helpscout创建的文档创建了一个wordpress主题,为了减少支持票证的数量,我想做同样的事情EDD:https://easydigitaldownloads.com/support/, 如果您单击“提交支持请求”,将显示一个输入,如果您输入一个单词,例如“google”,则可以使用指向helpscout文档的链接,然后您可以创建请求。我复制了这个网站的代码,我用重力表单创建了一个多部分表单,一切都很好,除了看文档,这是我输入的代码。php文件:

function support_form() {

    if ( ! wp_script_is( \'gform_gravityforms\' ) ) {
        return;
    } ?>

    <script type="text/javascript">
        jQuery(document).ready(function($) {

            var wrap      = $(\'.gform_body .gfield.helpscout-docs\');
            var paging    = $(\'.gform_body .gform_page_footer\');
            var hidden    = $(\'.gform_body .gfield.helpscout-docs\').next().find(\'input\');
            var field     = wrap.find(\'input[type="text"]\');
            var searching = false, allowed = false;

            paging.hide();

            wrap.append( \'<div class="docs-search-wrap"></div>\' );
            field.attr( \'autocomplete\', \'off\' );

            paging.find(\'input[type="submit"]\').on(\'click\', function(e) {

                if( ! allowed ) {

                    return false;
                }

            });

            field.keyup(function(e) {

                query = $(this).val();

                if( query.length < 4 ) {
                    return;
                }

                var html = \'<ul class="docs-search-results">\';

                if( ! searching ) {

                    var count = 0;

                    // Getting Started
                    $.ajax({
                        url: \'https://docsapi.helpscout.net/v1/search/articles?collectionId=56d89d519033600eafd436e4&query=\' + query,
                        headers: {
                            \'Authorization\': \'Basic <?php echo base64_encode( \'username:password\' ); ?>\'
                        },
                        xhrFields: {
                            withCredentials: false
                        },
                        beforeSend: function() {
                            searching = true;
                        },
                        success: function(results) {

                            count += results.articles.items.length;

                            $.each( results.articles.items, function( key, article ) {
                                html = html + \'<li class="article"><a href="\' + article.url + \'" title="\' + article.preview + \'" target="_blank">\' + article.name + \'</a><li>\';
                            });
                        }
                    }).done(function() {

                        // FAQs
                        $.ajax({
                            url: \'https://docsapi.helpscout.net/v1/search/articles?collectionId=56d8b3c9c6979159b4453cf6&query=\' + query,
                            headers: {
                                \'Authorization\': \'Basic <?php echo base64_encode( \'username:password\' ); ?>\'
                            },
                            xhrFields: {
                                withCredentials: false
                            },
                            beforeSend: function() {
                                searching = true;
                            },
                            success: function(results) {

                                count += results.articles.items.length;

                                $.each( results.articles.items, function( key, article ) {
                                    html = html + \'<li class="article"><a href="\' + article.url + \'" title="\' + article.preview + \'" target="_blank">\' + article.name + \'</a><li>\';
                                });
                            }

                        }).done(function() {

                            // Extensions
                            $.ajax({
                                url: \'https://docsapi.helpscout.net/v1/search/articles?collectionId=56d8b96fc6979159b4453d22&query=\' + query,
                                headers: {
                                    \'Authorization\': \'Basic <?php echo base64_encode( \'username:password\' ); ?>\'
                                },
                                xhrFields: {
                                    withCredentials: false
                                },
                                beforeSend: function() {
                                    searching = true;
                                },
                                success: function(results) {

                                    count += results.articles.items.length;

                                    $.each( results.articles.items, function( key, article ) {
                                        html = html + \'<li class="article"><a href="\' + article.url + \'" title="\' + article.preview + \'" target="_blank">\' + article.name + \'</a><li>\';
                                    });
                                }
                            }).done(function() {
                                html = html + \'</ul>\'
                                html = \'<span class="results-found">\' + count + \' results found . . . </span>\' + html;
                                wrap.find(\'.docs-search-wrap\').html( html );
                                paging.show();
                                searching = false;
                            });
                        });
                    });


                }

            });
        });

    </script>

<?php
}

add_action( \'send_headers\', \'add_header_acao\' );
function add_header_acao() {
    header( \'Access-Control-Allow-Origin: *\' );
}
但是,当我在输入中输入一个单词时,控制台中会收到一条错误消息:“请求的资源上不存在“Access Control Allow Origin”标头。”

我没有正确插入“Access Control Allow Origin”(访问控制允许原点)?是不是因为“用户名:密码”,我在仪表板帮助scout中设置了用户名和密码,也许我不需要插入。

你能帮帮我吗?

非常感谢:)

3 个回复
SO网友:Nick

我找到了!!!这与“Access Control Allow Origin”无关,因为是API密钥,我在仪表板帮助scout中输入了用户名和密码,我必须为我的文档输入API密钥:)

非常感谢您的帮助:)

SO网友:kingkool68

您正试图向另一个域发出AJAX请求,但出于安全/隐私原因,JavaScript禁止该请求。如果docsapi。helpscout。net在响应中返回了一个特定的HTTP头,然后它就可以工作了。这个Stackoverflow问题的答案很好地解释了CORS的工作原理https://stackoverflow.com/questions/10636611/how-does-access-control-allow-origin-header-work

一种解决方法是向您自己的服务器发出AJAX请求,并传递您想要查询的URL,然后让您的服务器发出请求并将响应返回到您的页面。这绕过了跨站点原点的问题,但有点复杂。

SO网友:majick

您是否尝试添加它提到的标题。尽管正如@kingkool68所指出的,这是一个CORS请求,但似乎只有在发送请求所需的头时,才能得到所需的响应。尝试通过以下方式添加:

headers: {
    \'Access-Control-Allow-Origin\': \'<?php echo home_url(); ?>\',
    \'Authorization\': \'Basic <?php echo base64_encode( \'username:password\' ); ?>\'
},

相关推荐

尝试在WordPress中实现AJAX注释,遇到WP错误

我试图在WordPress中为我的评论实现Ajax,使用this tutorial. 但我在将教程中的代码集成到自己的预构建主题时遇到了问题。问题是,我要么得到一个WP错误“检测到重复注释;看来你已经说过了!”或标准500错误。以下是我得到的:下面是我对ajax的评论。js文件如下所示: * Let\'s begin with validation functions */ jQuery.extend(jQuery.fn, { /* * check i