Php 向restfull api发送ajax POST请求
我通过教程创建了一个基于php slim框架的API,现在我可以使用autentification注册、登录用户:Php 向restfull api发送ajax POST请求,php,jquery,ajax,rest,cross-domain,Php,Jquery,Ajax,Rest,Cross Domain,我通过教程创建了一个基于php slim框架的API,现在我可以使用autentification注册、登录用户: URL /register Method POST Params name, email, password /注册调用不需要自动识别,所以我编写ajax来测试API: <button id="createPin"></button> <script> $(function() { $('#createPin').clic
URL /register
Method POST
Params name, email, password
/注册调用不需要自动识别,所以我编写ajax来测试API:
<button id="createPin"></button>
<script>
$(function() {
$('#createPin').click(function(e) {
e.preventDefault();
var dataTest = { "name": "test", "email": "pepe@peperoni.com", "password": "sarasa" }
var urlAjax = "http://www.agroagro.com/test/v1/register";
$.ajax({
type: "POST",
url: urlAjax,
contentType: "application/json",
data: dataTest ,
success: function(data) { alert("ajax worked"); },
error: function(data) {console.log(data); },
dataType: 'json',
beforeSend: function (xhr) {
xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
},
headers: {
'Access-Control-Allow-Origin': '*'
}
});
});
});
</script>
有没有任何解决方案可以跨域发出ajax请求,因为我计划将此代码用作移动应用程序的前端,所以我需要通过ajax跨域发出请求
(restApi是按照本教程创建的:)您需要设置正确的标题响应 在我的例子中,我有一组默认的头,当我收到对我的api控制器的调用时,我总是设置这些头。这是在我的_构造中设置的
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization");
有一些非常有用的指南可以帮助您了解CORS是如何工作的以及为什么需要它
编辑:
首先,您需要通过使用访问控制allow Origin:*来允许访问所有源代码:*,您现在正在执行此操作,因此您将看到与发布的原始错误不同的错误。我在使用phoneGap和Ionic时遇到了类似的问题,通过在ajax调用中添加内容类型头解决了这个问题。这篇文章帮助了我
我正在为我的API使用Codeigniter,所以我不知道这会有多大帮助,但它非常通用,所以应该为您指出正确的方向
我有一个名为API的控制器,用于从数据库获取数据并返回JSON
class Api extends CI_Controller {
....
....
}
在这个类中,我有一个_构造函数。__构造总是在调用中的类时运行,因此您不需要自己调用它。在_构造中,设置头CORS头
public function __construct()
{
parent::__construct();
// Set access header
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Access-Control-Allow-Headers: Origin, HTTP_X_REQUESTED_WITH, Content-Type, Accept, Authorization");
....
....
}
我希望这有帮助我读过这篇文章,但我不知道如何将其实现到我的代码中。。。我还尝试了chrom Browser,您需要在提供相关JS代码的Web服务器上设置a-c-a-o头。如果任意JS代码都可以设置头,那么跨源限制就没有意义了。“为什么,是的,我可以和任何我想要的人说话。”。不。服务器必须包含标题“允许您与X、Y、Z通话”,因此我需要在服务器端添加代码:带有访问控制的标题…是的。服务器发送您的JS代码,并包含cors头,告诉浏览器允许JS代码向您指定的任何站点发出请求。“这是一些代码。允许向站点X、Y和Z发出CORS请求”。我现在将尝试使用_构造向我显示您的设置文件。。。当我将它添加到我的_construct:public function uu构造($items=array()){header(“访问控制允许来源:”);header(“访问控制允许方法:GET、POST、PUT、DELETE、OPTIONS”);header(“访问控制允许来源、内容类型、接受、授权”);$this->replace($items);}I GET:XMLHttpRequest无法加载。无效的HTTP状态代码404任何示例,我需要放置此代码的文件在哪里?
public function __construct()
{
parent::__construct();
// Set access header
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Access-Control-Allow-Headers: Origin, HTTP_X_REQUESTED_WITH, Content-Type, Accept, Authorization");
....
....
}