Symfony 2上的CORS错误是使用Javascript调用WebService的ImpleSoapBundle

Symfony 2上的CORS错误是使用Javascript调用WebService的ImpleSoapBundle,javascript,web-services,symfony,cors,Javascript,Web Services,Symfony,Cors,我正在与一起在symfony2上做我的web服务。我用测试我的web服务,我可以看到我的web服务是正常的,但是当尝试用javascript测试时,它失败了。我从控制台浏览器中发现以下错误 选项http://192.168.0.68/controlid/web/app_dev.php/ws/loginOperador?wdls 405(不允许使用方法)jquery.js:4 选择权http://192.168.0.68/controlid/web/app_dev.php/ws/loginOper

我正在与一起在symfony2上做我的web服务。我用测试我的web服务,我可以看到我的web服务是正常的,但是当尝试用javascript测试时,它失败了。我从控制台浏览器中发现以下错误

选项http://192.168.0.68/controlid/web/app_dev.php/ws/loginOperador?wdls 405(不允许使用方法)jquery.js:4
选择权http://192.168.0.68/controlid/web/app_dev.php/ws/loginOperador?wdls 请求的资源上不存在“Access Control Allow Origin”标头。起源'http://localhost因此,不允许访问。jquery.js:4
无法加载XMLHttpRequesthttp://192.168.0.68/controlid/web/app_dev.php/ws/loginOperador?wdls. 请求的资源上不存在“访问控制-允许来源”标头。起源'http://localhost因此,不允许访问。(索引):1
下一段代码是使用javascript调用我的web服务的方法

函数调用服务()
{
var-webServiceURL=http://192.168.0.68/controlid/web/app_dev.php/ws/loginOperador?wdls';
var soapMessage='+$('#nombre').val()+';
jQuery.support.cors=true;
//拉马莫斯·阿贾克斯·德JQuery
$.ajax({
类型:“POST”,
url:webServiceURL,
跨域:是的,
cache:false,
数据:soapMessage,
processData:false,
数据类型:“xml”,
contentType:“应用程序/soap+xml;字符集=utf-8”,
成功:一旦成功,
错误:OnError
});
返回false;
}
这是我在symfony上的web服务代码:

/**
  * Método que se encarga de verificar si un operador
  * puede tener acceso desde la aplicación móvil.
  *
  * @Soap\Method("login")
  * @Soap\Param("pin", phpType = "string")
  * @Soap\Result(phpType = "string")
*/
public function loginAction( $pin )
{
    $em =  $this->container->get('doctrine')->getEntityManager();       
    try 
    {
        $operador = $em->getRepository('controlidRondasBundle:Operador')->findOneBy(array('pin'=>$pin));
        if( empty($operador) )
        {
            return sprintf('Acceso denegado');
        }
        else{
            return sprintf('Bienvenido %s!', $operador->getNombre() );
        }
    } 
    catch (\Doctrine\Orm\NoResultException $e) 
    {
        return sprintf('Acceso denegado');
    }
}
这是我在symfony上的服务设置(app/conf/config.yml)

be\u simple\u soap:
服务:
DemoApi:
名称空间:http://controlid/ws/DemoApi/1.0/
绑定:rpc文本
资源:“@controlidRondasBundle/Controller/RegisterController.php”
资源类型:注释
罗吉诺佩拉多:
名称空间:http://controlid/ws/loginOperador/1.0/
绑定:rpc文本
资源:“@controlidSeguridadBundle/Controller/OperatorSecurityController.php”
资源类型:注释
和路由_dev.yml:

\u besimple\u soap:
资源:“@BeSimpleSoapBundle/Resources/config/routing/webservicecontroller.xml”
前缀:/ws

有人会问我我做错了什么?

我必须做的是设置我的

  • 启动模块
  • a2enmod头文件
    服务apache2重新启动
    
    二,。并编辑文件
    /etc/apache2/sites enabled

    
    ....
    服务器管理员webmaster@localhost
    DocumentRoot/var/www/html
    ...
    ErrorLog${APACHE_LOG_DIR}/error.LOG
    CustomLog${APACHE\u LOG\u DIR}/access.LOG组合
    ...
    #我补充的东西
    标题集访问控制允许原点“*”
    标题添加访问控制允许标题“来源,内容类型”
    Header始终设置访问控制允许方法“POST、GET、PUT、DELETE、OPTIONS”
    #我添加的东西的结尾
    
    编辑

    上面的答案只适用于本地主机,但当我试图在主机或Whatever云上这样做时,错误依然存在,所以答案是肯定的

    安装:

    php composer.phar require nelmio/cors-bundle:~1.0
    
    然后添加到
    project/app/AppKernel.php

    public function registerBundles()
    {
    $bundles=数组(
    ...
    新建Nelmio\CorsBundle\Nelmio CorsBundle(),
    ...
    );
    ...
    }
    
    现在,在
    project/app/config/config.yml
    add上设置包和我的路径

    nelmio_cors:
    默认值:
    允许\u凭据:true
    允许来源:[]
    允许_头:[]
    允许_方法:[]
    expose_头:[]
    最大年龄:0
    主持人:[]
    路径:
    '^/':
    允许源代码:['*']
    允许_头:['origin','content type']
    允许_方法:['POST','PUT','GET','DELETE','OPTIONS']
    最高年龄:3600
    

    总之,它是有效的

    我看不到您的代码中有任何地方设置了“Access Control Allow Origin”(访问控制允许来源)标题,消息明确指出这是必需的。还有,你到底为什么要混合使用SOAP和JS呢?(很抱歉,但我发现SOAP是一种不必要的复杂方式,无法实现环境之间的互操作性。)1。如何设置具有访问控制的标头允许原点?2.
    SOAP+JS
    ,因为web服务由phonegap应用程序使用