AJAX请求失败,原因不明(jQuery) [英] AJAX request failed with unknown reason (jQuery)
问题描述
我有一个返回JSON数据的服务: http://api.drag2droid.shamanland. com/captcha?base64
I have a service which returns JSON data: http://api.drag2droid.shamanland.com/captcha?base64
我正在尝试执行简单的AJAX请求:
I'm trying to execute simple AJAX request:
$.ajax({
type: "get",
url: "http://api.drag2droid.shamanland.com/captcha?base64",
dataType: "json",
success: function(data) {
$("body").html(data);
},
error: function(jqXHR, textStatus, errorThrown) {
$("body").html("ajax failed: " + textStatus + ", " + jqXHR.status + " " + errorThrown);
}
});
结果是:
ajax failed: error, 0
但是,如果我只是将此URL粘贴到浏览器中的地址栏中,则可以看到json响应.
But if I just paste this url into address-bar in my browser, I can see json response.
有人知道可能存在的陷阱吗?
Does somebody knows about possible traps?
JSFiddle: http://jsfiddle.net/shomeser/n5TjL/
JSFiddle: http://jsfiddle.net/shomeser/n5TjL/
已编辑
实际上,我已经在服务器端进行了设置,以允许来自任何域的任何请求以及任何标头,PHP代码:
Actually, I already set up my server-side to allow all requests from any domain with any header, PHP-code:
if ($_SERVER["REQUEST_METHOD"] == "OPTIONS") {
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Max-Age: 86400");
header("Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS");
if (isset($_SERVER["HTTP_ACCESS_CONTROL_REQUEST_HEADERS"])) {
header("Access-Control-Allow-Headers: {$_SERVER["HTTP_ACCESS_CONTROL_REQUEST_HEADERS"]}");
}
exit(0);
}
已编辑
在Firebug插件的网络"标签中,我看到没有检索到任何内容:
In the Network-tab of Firebug plugin I can see that there is no content retrieved:
但是从浏览器直接获取GET-reqeust可以显示全部内容.
But direct GET-reqeust from a browser shows full content.
推荐答案
谢谢大家,我发现了我的问题.从这篇文章复制并粘贴代码PHP之后,我决定对其进行优化-我将所有语句放入if METHOD == OPTIONS
.这是错误的.
Thank you all, guys, I found my problem. After I copy-paste code PHP-from this post, I decided to optimize it - I placed all statements into if METHOD == OPTIONS
. This is fault.
标头Access-Control-Allow-Origin
不仅应返回给OPTIONS
请求,还应返回.
Header Access-Control-Allow-Origin
should be returned not only for OPTIONS
request.
我更新的代码工作正常:
My updated code works fine:
if (isset($_SERVER["HTTP_ORIGIN"])) {
header("Access-Control-Allow-Origin: {$_SERVER["HTTP_ORIGIN"]}");
}
if ($_SERVER["REQUEST_METHOD"] == "OPTIONS") {
if (isset($_SERVER["HTTP_ACCESS_CONTROL_REQUEST_METHOD"])) {
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
}
if (isset($_SERVER["HTTP_ACCESS_CONTROL_REQUEST_HEADERS"])) {
header("Access-Control-Allow-Headers: {$_SERVER["HTTP_ACCESS_CONTROL_REQUEST_HEADERS"]}");
}
exit(0);
}
感谢@Patrick Evans的第二条评论,但它已经被删除=)
Thanks to @Patrick Evans second comment, but it's already deleted =)
这篇关于AJAX请求失败,原因不明(jQuery)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!