Python Jquery跨域ajax请求始终出错

Python Jquery跨域ajax请求始终出错,python,ajax,json,jquery,bottle,Python,Ajax,Json,Jquery,Bottle,我正在尝试创建一个简单的Jquery移动应用程序。 我的设置如下: jQuery客户端正在localhost:9090/myapp上运行 我的服务器正在本地主机上运行:9010/paperboy 因为我在windows上,所以在服务器端,我使用一个简单的服务器,使用一个python微框架“瓶子创建 服务器根据请求返回json,我可以在Chrome或Firefox中清楚地看到 我已经验证了我的响应,它是一个有效的JSON 我面临的问题是,我希望我的客户机从服务器响应中读取json。 但由于这是一个

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

  • jQuery客户端正在localhost:9090/myapp上运行
  • 我的服务器正在本地主机上运行:9010/paperboy
  • 因为我在windows上,所以在服务器端,我使用一个简单的服务器,使用一个python微框架“瓶子创建
  • 服务器根据请求返回json,我可以在Chrome或Firefox中清楚地看到
  • 我已经验证了我的响应,它是一个有效的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支持。
    我感谢您在这件事上的帮助,并提前感谢您的帮助。

    谢谢。

    您自己说的,因为这是一个跨来源呼叫,默认情况下,它是不允许的

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


    或者,由于响应是JSON,您可以使用非常类似的,这有利于使用所有浏览器(并且没有jQuery修补程序)。

    您自己说的,因为它是一个跨源调用,默认情况下是不允许的

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


    或者,由于响应是JSON,您可以使用非常类似的,这有利于使用所有浏览器(并且没有jQuery补丁)。

    我还尝试从服务器上将内容类型设置为“application/JSON”。我还尝试从服务器上将内容类型设置为“application/JSON”。太棒了!!!非常感谢你。它就像一个符咒。我所要做的就是设置一个header属性。事实上,它存在于大脑中。我的缺点是看得太多。@ashish.gd:很高兴这有帮助!明亮的非常感谢你。它就像一个符咒。我所要做的就是设置一个header属性。事实上,它存在于大脑中。我的缺点是看得太多。@ashish.gd:很高兴这有帮助!