如何从ajax返回的HTML中访问json数据?

时间:2013-04-12 20:33:32

标签: jquery ajax

我正在尝试从Ajax调用中检索json项数据,该调用返回html和json。我的javascript下面会返回一条成功消息,这很有用;我只是不确定如何访问数据。我正在尝试从此回复中访问newPrice

Data Loaded: <pre>Array
(
[point] => 86
[claimId] => 3594
[type] => yeh
)
</pre>{"data":{"newPrice":88,"lockedInPrice":86},"errors":[],"success":true,"code":200}

我的代码如下。我特意试图只返回newPrice值:

var newData = $.ajax({ 
    type: "POST",
    url: takeurl,
    dataType: "html",
    data: { point: point, claimId: id, type: val }
    })
    .success(function(data) { 
        alert("Data Loaded: " + data);
        //newPrice = data.newPrice; -- returned undefined?
        console.log(newPrice);
        })

    .error(function() { alert("not yet"); })
    .complete(function(data) { 
        console.log('complete 1' );
    });

// Set another completion function for the request above
newData.complete(function(data){ 
    console.log("second complete" );
    });


return false;
 });

谢谢!

3 个答案:

答案 0 :(得分:3)

似乎你在响应中同时拥有HTML和JSON。通常,响应仅为JSON,并以内容类型application / JSON进行响应。虽然可以使用响应,但这有点不正统。

您可以使用substring和indexof剪切HTML部分“”,然后使用JSON创建一个javascript对象。

var data = "<pre>Array\n(\n[point] => 86\n[claimId] => 3594\n[type] => yeh\n)\n</pre>{\"data\":{\"newPrice\":88,\"lockedInPrice\":86},\"errors\":[],\"success\":true,\"code\":200}";

alert("Data Loaded: " + data);
var n = data.indexOf("</pre>{");
data = data.substring(n+6);
var result = JSON.parse(data);
alert("JSON.newPrice:"+result.data.newPrice);

JSON.parse()方法用于将JSON字符串转换为JSON对象。

答案 1 :(得分:0)

如果要以JSON形式访问响应,则必须以application/json内容类型返回,并且看起来像一个有效的JavaScript普通对象。同时设置dataType jQuery.ajax json来自{{1}}。

答案 2 :(得分:0)

为了避免在代码片段下面的控件使用Json Response中使用“pre”标签获取HTML。

var result= objectData;
return Json(result, "text/html");