【问题标题】:JQuery AJAX Post Request keeps failing with absolute URLJQuery AJAX 发布请求通过绝对 URL 不断失败
【发布时间】:2011-08-02 00:09:53
【问题描述】:

我正在尝试通过 AJAX 测试 API。我用过 JQuery:

$(document).ready(function(){

    $('#ajax').click(function(e){

        var sampleHTML = '<html></html>';

        var api_key = 'asfasasfs2';        

        $.post('http://google.com/', { api_key: api_key, html: sampleHTML },

           function(data) {

             alert("Data Loaded: " + data);

        });

    });

});

当我使用绝对 URL 时,我需要使用它,因为这是一个外部 API,firebug 什么也没显示。好像没有发帖请求一样!

我想我会在 chrome 上测试它,它显示状态为已取消,类型为待处理。这是什么意思?

请注意,我已将 Google 的 URL 用于隐藏我的 API URL。

【问题讨论】:

  • 这个 API 在哪里?它与调用它的 javascript 在同一个域上/下吗?
  • 确保检查你的萤火虫设置,这对我有用:jsfiddle.net/FsWjF
  • @Alastair - 它是一个完全不同域的外部 API。

标签: jquery ajax


【解决方案1】:

请参阅jquery documentation。如果 url 不在同一个域中,它将不起作用:

由于浏览器安全限制,大多数“Ajax”请求都受同源策略的约束;请求无法从不同的域、子域或协议中成功检索数据。

如果你可以调整你的 api,你可以试试ajax post with script or jsonp as the return data

脚本和 JSONP 请求不受同源策略限制。

【讨论】:

  • 我尝试将我的 AJAX 请求设置为 jsonp,但它一直显示为 GET 请求,即使我使用的和上面的完全相同。
  • API端需要支持JSONP,不能只在需要的时候使用。
  • @Alastair - 受支持。即使不是,Chrome 也不应该将请求显示为 GET 请求,除非这是您可以将其用作 GET 请求的唯一方法?
【解决方案2】:

试试这个

$(document).ready(function(){

    $('#ajax').live("click", function(e){


            $.ajax({
                        type: "POST",
                        url: "http://www.google.com",
                        data:   "api_key"="asfasasfs2"
                            "&html="<html><html>", 
                        success: function(html){
                            alert(data);
                        },
                         error: function(request){
alert(request.responseText);
                          },
                            complete    : function(){
                            }
                        });
    });

});

试试这个。它应该工作。同源政策不适用于发布的表格。 如果 fire bug 没有显示任何内容,则表示未生成 click 事件

【讨论】:

  • 其实同源策略确实会影响ajax post。唯一的方法是使用脚本或 jsonp 作为返回数据。见'Additional Notes' in the docs
  • 是的,这被取消了。所以我认为它受到同源政策的影响。
猜你喜欢
  • 2015-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
  • 1970-01-01
  • 2011-06-02
相关资源
最近更新 更多