AJAX请求失败,原因不明(jQuery) [英] AJAX request failed with unknown reason (jQuery)

查看:115
本文介绍了AJAX请求失败,原因不明(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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆