jQuery - 无法解析json

时间:2015-03-17 08:30:59

标签: jquery python json flask

我使用json.dumps

通过我在json中的Python服务器发送回复
return '{"status":200, "response":%s}' % (json.dumps(data))

我通过jQuery以下列方式检索它。

$.ajax({
        dataType: "jsonp",
        type : "GET",
        url: url,
        data : {},
        success : function(result){
            alert(result)
        },
        error: function (jqXHR, textStatus, errorThrown) {
            alert(jqXHR)
            alert(textStatus)
            alert(errorThrown)
        },
    });

我得到的回应是

{
    "status": 200,
    "response": {
        "count": 2,
        "2015_03_16": [
            {
                "imei1": "111",
                "status": "Success",
                "imei2": "NA",
                "msisdn": "111",
                "offer_id": "1",
                "ctype": "pre",
                "date": "2015-03-16 06:42:46",
                "recharge_api": "12",
                "points": "2",
                "operator": "vodafone",
                "model": "MicromaxA069",
                "circle": "delhi"
            },
            {
                "imei1": "111",
                "status": "Success",
                "imei2": "NA",
                "msisdn": "111",
                "offer_id": "1",
                "ctype": "pre",
                "date": "2015-03-16 06:42:46",
                "recharge_api": "12",
                "points": "2",
                "operator": "vodafone",
                "model": "MicromaxA069",
                "circle": "delhi"
            }
        ]
    }
}

在提示错误时,会显示parserror。我已经阅读了各种帖子,需要在json中发送数据以便jquery解析它,我也做了同样的事情。为什么我仍然收到错误?

修改

我刚创建了一个虚拟代码,

<html>
    <body>
        Helo
    </body>
    <script type="text/javascript" src="untitled.js"></script>
    <script type="text/javascript">
    $(function(){
        $.ajax({
            type : "GET",
            url: 'a.json',
            data : {},
            success : function(result){
                alert(result)
            },
            error: function (jqXHR, textStatus, errorThrown) {
                console.log(jqXHR)
            },
        });
    });

    </script>
</html>

我在同一目录中创建了一个文件a.json,其中包含以下内容。

{
    "status": 200,
    "response": {
        "count": 3,
        "2015_03_16": [
            {
                "InstallCount": "1",
                "ad": "Amazon",
                "conversion": null,
                "ClickCount": "0"
            },
            {
                "InstallCount": "2",
                "ad": "Mobikwik",
                "conversion": "0.6667",
                "ClickCount": "3"
            },
            {
                "InstallCount": "1",
                "ad": "Quickr",
                "conversion": "1.0000",
                "ClickCount": "1"
            }
        ]
    }
}

当我运行上面的HTML代码时,它仍会进入错误功能并记录以下结果。

readyState 4
responseText "{"status":200, "response":{"count": 3, "2015_03_16": [{"InstallCount": "1", "ad": "Amazon", "conversion": null, "ClickCount": "0"}, {"InstallCount": "2", "ad": "Mobikwik", "conversion": "0.6667", "ClickCount": "3"}, {"InstallCount": "1", "ad": "Quickr", "conversion": "1.0000", "ClickCount": "1"}]}} "
status 200
statusText "OK"
abort function(a)
always function()
complete function()
done function()
error function()
fail function()
getAllResponseHeaders function()
getResponseHeader function(a)
overrideMimeType function(a)
pipe function()
progress function()
promise function(a)
setRequestHeader function(a, b)
state function()
statusCode function(a)
success function()
then function()

现在我做错了什么您也可以在系统中尝试上述代码。

2 个答案:

答案 0 :(得分:4)

你告诉jQuery期望 JSON P ,而不是JSON。 JSONP是JSON包装在回调中,但是你没有提供这样的回调包装。

p调用中的jsonp类型中删除$.ajax(),或添加回调包装。回调名称可在callback GET参数中找到。

您还需要使用正确的内容类型返回正确的JSON响应。由于您使用的是Flask,最简单的方法是使用jsonify() function;它将创建一个响应对象,并为您设置正确的内容类型:

from flask import jsonify

# ...

return jsonify(status=200, response=data)

另一种方法是返回你构建的字符串但是带有状态代码和标题字典:

return '{"status":200, "response":%s}' % (json.dumps(data)), 200, {'Content-Type': 'application/json'}

无论哪种方式,您都可以使用the decorator from this Flask snippet 支持JSONP。你将它放在@app.route()装饰器之后,在你的视图函数之前:

@app.route('/some/path')
@jsonp
def your_view_function():
    # ...

答案 1 :(得分:0)

服务器返回错误

您可以在Chrome开发者工具中找到错误

打开开发人员工具,点击&#34;控制台&#34;

res = [{&#34; status&#34;:200,&#34; response&#34;:{&#34; count&#34;:2,&#34; 2015_03_16&#34;:[{ &#34; imei1&#34;:&#34; 111&#34;,&#34; status&#34;:&#34;成功&#34;,&#34; imei2&#34;:&#34; NA& #34;,&#34; msisdn&#34;:&#34; 111&#34;,&#34; offer_id&#34;:&#34; 1&#34;,&#34; ctype&#34;:& #34; pre&#34;,&#34; date&#34;:&#34; 2015-03-16 06:42:46&#34;,&#34; recharge_api&#34;:&#34; 12&# 34;,&#34;积分&#34;:&#34; 2&#34;,&#34;运营商&#34;:&#34;沃达丰&#34;,&#34;型号&#34;:&# 34; MicromaxA069&#34;,&#34; circle&#34;:&#34; delhi&#34;},{&#34; imei1&#34;:&#34; 111&#34;,&#34; status& #34;:&#34;成功&#34;,&#34; imei2&#34;:&#34; NA&#34;,&#34; msisdn&#34;:&#34; 111&#34;,& #34; offer_id&#34;:&#34; 1&#34;,&#34; ctype&#34;:&#34; pre&#34;,&#34; date&#34;:&#34; 2015- 03-16 06:42:46&#34;,&#34; recharge_api&#34;:&#34; 12&#34;,&#34;积分&#34;:&#34; 2&#34;,&# 34;运营商&#34;:&#34;沃达丰&#34;,&#34;型号&#34;:&#34; MicromaxA069&#34;,&#34;圈&#34;:&#34;德里&#34 ;}]}}

您将收到错误信息:Uncaught SyntaxError:Unexpected token}

很容易找到答案的结束需要&#34;]&#34;

抱歉我的英语不好