Javascript 嵌套JSON数组和敲除可观察数组
我需要将这个JSON数组绑定到我的ViewModel。没有错误,只是数据没有绑定Javascript 嵌套JSON数组和敲除可观察数组,javascript,json,knockout.js,Javascript,Json,Knockout.js,我需要将这个JSON数组绑定到我的ViewModel。没有错误,只是数据没有绑定 [ [ { "FlightID": "565", "FlightNumber": "731", "CityFromID": "1", "CityFromCode": "MOW", "CityToID": "19", "CityToCode": "BC
[
[
{
"FlightID": "565",
"FlightNumber": "731",
"CityFromID": "1",
"CityFromCode": "MOW",
"CityToID": "19",
"CityToCode": "BCN",
"AirportFromCode": "DME",
"AirportFromName": null,
"AirportToCode": "BCN",
"AirportToName": null,
"DepartureDate": "20150320",
"DepartureTime": "17:00",
"ArrivalDate": "20150320",
"ArrivalTime": "21:00",
"Price": "350",
"Currency": "€",
"AirServiceID": "89",
"AirCraft": "Boeing",
"AirlineName": "TRANSAERO",
"AirlineCode": "UN",
"PackageID": "232",
"CityFromName": "Москва",
"CityToName": "Барселона",
"TariffName": null,
"FinalPrice": 700
},
{
"FlightID": "566",
"FlightNumber": "732",
"CityFromID": "19",
"CityFromCode": null,
"CityToID": "1",
"CityToCode": null,
"AirportFromCode": "BCN",
"AirportFromName": null,
"AirportToCode": "DME",
"AirportToName": null,
"DepartureDate": "20150321",
"DepartureTime": "07:00",
"ArrivalDate": "20150321",
"ArrivalTime": "11:00",
"Price": "350",
"Currency": "€",
"AirServiceID": "89",
"AirCraft": "Boeing",
"AirlineName": "TRANSAERO",
"AirlineCode": "UN",
"PackageID": "232",
"CityFromName": "Барселона",
"CityToName": "Москва",
"TariffName": null,
"FinalPrice": 700
}
],
[
{
"FlightID": "563",
"FlightNumber": "2639",
"CityFromID": "1",
"CityFromCode": "MOW",
"CityToID": "19",
"CityToCode": "BCN",
"AirportFromCode": "SVO",
"AirportFromName": null,
"AirportToCode": "BCN",
"AirportToName": null,
"DepartureDate": "20150320",
"DepartureTime": "11:50",
"ArrivalDate": "20150320",
"ArrivalTime": "19:15",
"Price": "350",
"Currency": "€",
"AirServiceID": "89",
"AirCraft": "Boeing",
"AirlineName": "Aeroflot-Russian International AirLines",
"AirlineCode": "SU",
"PackageID": "232",
"CityFromName": "Москва",
"CityToName": "Барселона",
"TariffName": null,
"FinalPrice": 700
},
{
"FlightID": "564",
"FlightNumber": "2640",
"CityFromID": "19",
"CityFromCode": null,
"CityToID": "1",
"CityToCode": null,
"AirportFromCode": "BCN",
"AirportFromName": null,
"AirportToCode": "SVO",
"AirportToName": null,
"DepartureDate": "20150321",
"DepartureTime": "11:50",
"ArrivalDate": "20150321",
"ArrivalTime": "14:50",
"Price": "350",
"Currency": "€",
"AirServiceID": "89",
"AirCraft": "Boeing",
"AirlineName": "Aeroflot-Russian International AirLines",
"AirlineCode": "SU",
"PackageID": "232",
"CityFromName": "Барселона",
"CityToName": "Москва",
"TariffName": null,
"FinalPrice": 700
}
]
]
这就是我所说的:
self.getprices = function () {
$.ajax({
url: "@Url.Content("~/Home/GetFlights")",
data: $("form").serialize(),
type: "post",
cache: false,
dataType: "json"
})
.done(function (result) {
if (result === "Запрос не вернул результатов.") {
$("#errlbl").hide();
$("#errormsg").text(result);
$("#modalerror").modal();
} else {
self.prices(ko.toJSON(result));
ko.mapping.fromJS(result, {}, self.prices());
}
})
.fail(function (xhr, ajaxOptions, thrownError) {
console.log(xhr.responseText);
});
};
这就是标记:
<div class="row" id="searchresult">
<div class="col-md-6" id="flightsfrom">
<table class="table table-striped">
<tbody data-bind="foreach: flightsfrom">
<tr>
<td data-bind="text: ko.utils.unwrapObservable($data.CityFromName) + ' ' + ko.utils.unwrapObservable($data.AirportFromCode) + ' - ' + ko.utils.unwrapObservable($data.CityToName) + ' ' + ko.utils.unwrapObservable($data.AirportToCode)"></td>
</tr>
<tr>
<td data-bind="text: 'Вылет: ' + ko.utils.unwrapObservable($data.DepartureTime) + ' Прилет: ' + ko.utils.unwrapObservable($data.ArrivalTime)"></td>
</tr>
<tr>
<td data-bind="text: ko.utils.unwrapObservable($data.AirlineName)"></td>
</tr>
<tr>
<td data-bind="text: ko.utils.unwrapObservable($data.AirlineCode) + ' ' + ko.utils.unwrapObservable($data.FlightNumber)+ '. Тип ВС: ' + ko.utils.unwrapObservable($data.AirCraft)"></td>
</tr>
<tr>
<td>
<input type="button" data-bind="value: 'Купить за : ' + ko.utils.unwrapObservable($data.FinalPrice) + ' ' + ko.utils.unwrapObservable($data.Currency), click: $root.bookflight.bind($data, $data.AirlineCode)" class="btn btn-warning" name="booking" />
</td>
</tr>
</tbody>
</table>
</div>
<div class="col-md-6" id="flightsto">
<table class="table table-striped">
<tbody data-bind="foreach: flightsto">
<tr>
<td data-bind="text: ko.utils.unwrapObservable($data.CityFromName) + ' ' + ko.utils.unwrapObservable($data.AirportFromCode) + ' - ' + ko.utils.unwrapObservable($data.CityToName) + ' ' + ko.utils.unwrapObservable($data.AirportToCode)"></td>
</tr>
<tr>
<td data-bind="text: 'Вылет: ' + ko.utils.unwrapObservable($data.DepartureTime) + ' Прилет: ' + ko.utils.unwrapObservable($data.ArrivalTime)"></td>
</tr>
<tr>
<td data-bind="text: ko.utils.unwrapObservable($data.AirlineName)"></td>
</tr>
<tr>
<td data-bind="text: ko.utils.unwrapObservable($data.AirlineCode) + ' ' + ko.utils.unwrapObservable($data.FlightNumber)+ '. Тип ВС: ' + ko.utils.unwrapObservable($data.AirCraft)"></td>
</tr>
<tr>
<td>
<h1></h1>
</td>
</tr>
</tbody>
</table>
</div>
</div>
我真的不知道如何让所有部件一起工作。一些事情
ko.mapping.fromJS()
在实际获取json对象时,需要一个javascript文本响应对象。从:
如果Ajax调用返回JSON字符串(并且没有将其反序列化为JavaScript对象),则可以使用函数ko.mapping.fromJSON来创建和更新视图模型。要取消映射,可以使用ko.mapping.toJSON
因此,您的ajax回调应该如下所示:
ko.mapping.fromJSON(response,self.prices())代码>
而不是:
self.prices(ko.toJSON(result));
ko.mapping.fromJS(result, {}, self.prices());
此外,由于您尚未发布您的KO
ViewModel,因此无法判断您的JSON属性值对与视图模型属性值对是否等效。这也可能造成问题
最后,您能否确认正在调用ajax的.done()
方法