【问题标题】:Jquery cross domain ajax request always errorjquery跨域ajax请求总是报错
【发布时间】:2013-01-28 18:11:09
【问题描述】:

我正在尝试创建一个简单的 Jquery 移动应用程序。 我的设置如下:

  1. jQuery 客户端正在 localhost:9090/myapp 上运行。
  2. 我的服务器在 localhost:9010/paperboy 上运行
  3. 由于我在 Windows 上,所以在服务器端我使用的是一个简单的服务器,它使用 Python 微框架“bottle”创建。
  4. 服务器根据请求返回 json,我可以在 Chrome 或 Firefox 中清楚地看到。
  5. 我已经验证了我的响应,它是一个有效的 JSON。

我面临的问题是,我希望我的客户端从服务器响应中读取 json。
但由于它是一个跨域问题,它不能这样做。
这是我的客户端 ajax 代码:

$.ajax({
        url: "http://localhost:9010/paperboy/toi",
        type:"GET",
        data:$(this),
        dataType:"jsonp",
        //jsonp:"callback",   no support on the server

        success:function(result){
            console.log("ajax result: " + result);
        },

        error:function(e){
            console.log("Error :" + e);
        }
    });

我的瓶子服务器代码是:

from bottle import route, run, template, response
from paperboy import getToiNews

''' call http://localhost:9010/paperboy/toi in browser'''

@route('/paperboy/:source')
def index(source='All'):
    print "requesting news list for %s" % source
    resultJson = getToiNews()
    response.content_type = "application/javascript"
    return resultJson

run(host='localhost', port=9010)

但是,在运行应用程序时,我最初遇到“ajax 源策略错误”,一旦我将内容类型添加到我的服务器,该错误很快就消失了。
现在 ajax 调用没有错误地通过,但总是调用“错误”处理程序。我尝试了各种组合,但都是徒劳的。我想不通的一件事是向我的服务器添加 jsonp 支持。
感谢您在此问题上的任何帮助,并提前感谢您的所有帮助。
谢谢。

【问题讨论】:

  • 我也尝试从服务器将内容类型设置为“application/json”。

标签: python ajax json jquery bottle


【解决方案1】:

你自己说的,因为是跨域调用,默认情况下SOP是不允许的。

如果您控制着服务器(并且您是),您可以使用CORS 来允许请求。这适用于任何现代浏览器。 (但遗憾的是,对于 IE8 和 IE9,您需要一个 jQuery 补丁来启用 Microsoft 特定的 XDomainRequest 对象而不是标准的 XMLHttpRequest;jQuery 团队拒绝将其放入库中。IE10最后为XMLHttpRequest添加跨域处理。)

或者,由于响应是 JSON,您可以改用非常相似的 JSON-P,它的优点是适用于所有浏览器(并且没有 jQuery 补丁)。

【讨论】:

  • 太棒了!!!非常感谢你。它就像一个魅力。我所要做的就是设置一个标题属性。事实上它存在于bottle docs using the hooks plugin。我不喜欢看它。
  • @ashish.gd:很高兴有帮助!
猜你喜欢
  • 2011-07-05
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
  • 2017-02-22
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多