Symfony 2上的CORS错误是使用Javascript调用WebService的ImpleSoapBundle
我正在与一起在symfony2上做我的web服务。我用测试我的web服务,我可以看到我的web服务是正常的,但是当尝试用javascript测试时,它失败了。我从控制台浏览器中发现以下错误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
选项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应用程序使用