我在做一个Ajax。请求一个远程PHP服务器在Sencha Touch 2应用程序(包装在PhoneGap)。
服务器的响应如下:
XMLHttpRequest无法加载http://nqatalog.negroesquisso.pt/login.php。Access-Control-Allow-Origin不允许Origin http://localhost:8888。
我该如何解决这个问题?
我在做一个Ajax。请求一个远程PHP服务器在Sencha Touch 2应用程序(包装在PhoneGap)。
服务器的响应如下:
XMLHttpRequest无法加载http://nqatalog.negroesquisso.pt/login.php。Access-Control-Allow-Origin不允许Origin http://localhost:8888。
我该如何解决这个问题?
当前回答
如果你正在编写一个Chrome扩展并得到这个错误,那么请确保你已经将API的基本URL添加到你的清单中。Json的权限块,例如:
"permissions": [
"https://itunes.apple.com/"
]
其他回答
如果你不能控制服务器,你可以简单地在Chrome启动器中添加这个参数:——disable-web-security。
注意,我不会将它用于正常的“网上冲浪”。参考:在Chrome中禁用同源策略。
如果你使用Phonegap来构建应用并将其加载到设备上,这就不是问题了。
我们也有同样的问题,phonegap应用程序在chrome测试。 在打开Chrome之前,我们每天使用下面的批处理文件。 记住在运行这个之前,你需要从任务管理器中清除所有的chrome实例,或者你可以选择chrome不运行在后台。
BATCH:(使用cmd)
cd D:\Program Files (x86)\Google\Chrome\Application\chrome.exe --disable-web-security
如果你在Angular.js中得到这个,那么确保你像这样转义你的端口号:
var Project = $resource(
'http://localhost\\:5648/api/...', {'a':'b'}, {
update: { method: 'PUT' }
}
);
更多信息请看这里。
这是我在尝试使用ASP解决相同问题时出现的第一个问题/答案。NET MVC作为数据源。我知道这并不能解决PHP的问题,但是它与PHP的关系是有价值的。
我使用ASP。净MVC。Greg Brant的博客文章对我很有用。最终,您将创建一个属性[HttpHeaderAttribute("Access-Control-Allow-Origin", "*")],您可以将其添加到控制器操作中。
例如:
public class HttpHeaderAttribute : ActionFilterAttribute
{
public string Name { get; set; }
public string Value { get; set; }
public HttpHeaderAttribute(string name, string value)
{
Name = name;
Value = value;
}
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
filterContext.HttpContext.Response.AppendHeader(Name, Value);
base.OnResultExecuted(filterContext);
}
}
然后用它:
[HttpHeaderAttribute("Access-Control-Allow-Origin", "*")]
public ActionResult MyVeryAvailableAction(string id)
{
return Json( "Some public result" );
}
在Ruby on Rails中,你可以在控制器中执行以下操作:
headers['Access-Control-Allow-Origin'] = '*'