gpt4 book ai didi

javascript - jQuery PHP 跨域请求问题

转载 作者:行者123 更新时间:2023-12-01 05:50:21 26 4
gpt4 key购买 nike

我相信这个问题之前已经被问过,但给出的答案不足以说明我的代码哪里错了。如果存在类似的问题,我深表歉意;我花了几个小时搜索但找不到解决方案。

我用 PHP 构建了一个小型的 RESTful 式服务,将数据库信息引入我的网站。我能够成功地从浏览器和 Fiddler 进行调用,但是当我尝试从 $.ajax() 请求数据时,我崩溃了。首先,让我发布 PHP 代码:

我正在调用http://api.horodyski.me

class ApiController
{
protected $endpoint = '';
protected $method = '';
protected $verb = '';
protected $args = Array();

public function __construct($request)
{
header("Access-Control-Allow-Orgin: *");
header("Access-Control-Allow-Methods: GET");
header("Content-Type: application/json");

$this->args = explode('/', rtrim($request, '/'));
$this->endpoint = array_shift($this->args);

if (array_key_exists(0, $this->args) && !is_numeric($this->args[0])) { $this->verb = array_shift($this->args); }

$this->method = $_SERVER['REQUEST_METHOD'];

if($this->method != 'GET')
throw new Exception("Unexpected Header");
$this->request = $this->_cleanInputs($_GET);

}

public function processAPI()
{
$class = $this->endpoint."Controller";
if(class_exists($class))
{
$controller = new $class();
return $this->_response($controller->getAllItems());
}
return $this->_response("No Endpoint: ".$this->endpoint, 404);
}

private function _response($data, $status = 200)
{
header("HTTP/1.1 ".$status." ".$this->_requestStatus($status));
// $data comes back from controller in JSON format.
return json_encode($data);
}

private function _cleanInputs($data)
{
$cleanInput = Array();
if(is_array($data))
foreach($data as $k => $v)
$cleanInput[$k] = $this->_cleanInputs($v);
else
$cleanInput = trim(strip_tags($data));
return $cleanInput;
}

private function _requestStatus($code)
{
$status = array(
200 => 'OK',
404 => 'Not Found',
405 => 'Method Not Allowed',
500 => 'Internal Server Error',
);
return ($status[$code]) ? $status[$code] : $status[500];
}
}

我尝试实现返回 jsonp 的 jQuery 调用,这就是我陷入困境的地方。

请求来自http://horodyski.me/v2。下面的代码显示了正常的 json 返回类型:

<p class="test"></p>
<script>
$(document).ready(function () {
$.ajax({
url: "http://api.horodyski.me/skills",
method: "GET",
dataType: 'jsonp',
success: function (data) {
$("p.test").text(data);
},
error: function (xhr, textStatus, error) {
debugger;
}
});
});
</script>

我在错误回调中收到以下内容:

textStatus = "解析错误"错误=“未调用jQuery210008879405278902885_1396911952892”

Fiddler 再次显示没有错误——我已经没有主意了。是我在 PHP 方面没有正确处理它,还是我的 jQuery 搞砸了?也许我需要编辑 .htaccess 文件来处理 jsonp 调用中从 jQuery 发送的回调参数?我实在是太不知所措了,有什么建议吗?

我可以调用http://horodyski.me/api/skills,它可以使用常规 json,但我仍然无法让 CORS 工作。

最佳答案

我会选择 CORS 替代品,这可以正常化浏览器之间的大部分差异。我通过 xdomain 获得了最好的体验。它在客户端与库无关,您可以使用 jQuery XHR 或任何其他库,而无需进行任何更改。

关于javascript - jQuery PHP 跨域请求问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22923972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com