Я конвертирую сложный объект, используя строку JSON.
Мне нужен такой вывод, чтобы я мог легко связать его с моей моделью.
DateRequired: "2019-02-02"
DeliveryDestination: "test"
ProjectCode: "002P"
RequestItems: {InventoryItemsId: "2", Brand: "NIKE", Types: "Casual", Specification: "Mentality", ItemName: "Wild"},
{InventoryItemsId: "3", Brand: "PUMA", Types: "Running", Specification: "Energy", ItemName: "Wild"}
Но вместо этого я получаю это.
DateRequired: "2019-02-02"
DeliveryDestination: "test"
ProjectCode: "002P"
RequestItems: Array(2)
0: {InventoryItemsId: "2", Brand: "NIKE", Types: "Casual", Specification: "Mentality", ItemName: "Wild", …}
1: {InventoryItemsId: "3", Brand: "PUMA", Types: "Running", Specification: "Energy", ItemName: "Wild", …}
length: 2
__proto__: Array(0)
__proto__: Object
Это код, который публикует данные:
var items = postAllItems(); //this is an array
var materialRequest = {
'DateRequired': $('#txtDateRequired').val(),
'ProjectCode': $('#txtProjectCode').val(),
'DeliveryDestination': $('#txtDeliveryDestination').val(),
'RequestItems': items
};
postMaterialRequest(materialRequest);
function postMaterialRequest(materials) {
$.ajax({
contentType: 'application/json',
type: 'POST',
url: '/api/PostMaterial',
data: JSON.stringify(materials),
success: function (data) {
console.info("Info Save " + data);
},
failure: function (response) {
console.info('Failed to save.');
}
});
}
Это то, что я получаю от веб-API
Или используйте «JSON.stringify(object,null,2)» для красивого варианта.
@ Geert-Jan, я пытался, но не повезло
спасибо за информацию @trincot, я обновил свой вопрос, чтобы сделать его более понятным.
Похоже, ваш вопрос действительно о чем-то другом: вы не можете ожидать синхронного отображения результата асинхронного результата. См. этот вопрос-ответ. В остальном вопрос не дает понять, что такое Count, что такое _items, что такое pimx.DTOs.RequestItemDto[0] (обводка на скриншоте больше не помогает) и как они относятся к вашему вопросу.
спасибо за понимание, просто я мало что знаю об этом асинхронном режиме, можете ли вы дать мне ссылки/ответ, чтобы понять это. да, я думаю, что смешиваю асинхронный с синхронным. извините за изображение, оно дает неправильное представление о вопросе. @тринкот
В упомянутых вопросах и ответах есть вся информация. Проверьте это.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это является правильный вид вывода - это просто способ отображения объекта консолью. Использование консоли StackOverflow или использование JSON.stringify показывает желаемый результат:
var myObj = {
DateRequired: "2019-02-02",
DeliveryDestination: "test",
ProjectCode: "002P",
RequestItems: [{
InventoryItemsId: "2",
Brand: "NIKE",
Types: "Casual",
Specification: "Mentality",
ItemName: "Wild"
},
{
InventoryItemsId: "3",
Brand: "PUMA",
Types: "Running",
Specification: "Energy",
ItemName: "Wild"
}
]
};
console.info(myObj);
console.info(JSON.stringify(myObj));.as-console-wrapper { max-height: 100% !important; top: 0; }когда я пытаюсь поставить его вручную, он работает ex. RequestItems: {InventoryItemsId: "2", Бренд: "NIKE", Типы: "Casual", Спецификация: "Mentality", ItemName: "Дикий"}, {InventoryItemsId: "3", Бренд: "PUMA", Типы: " Бег", Спецификация: "Энергия", ItemName: "Дикий"}
Я решаю свою проблему, используя приведенный ниже код, моя проблема заключается в том, чтобы не смешивать синхронную функцию с асинхронной. В котором пост ajax финиширует первым. Я использовал setTimeout для задержки публикации ajax. Благодаря ссылке @trincot.
function createObject() {
var mr = { DateRequired: $('#txtDateRequired').val(), ProjectCode: $('#txtProjectCode').val(), DeliveryDestination: $('#txtDeliveryDestination').val(), RequestItems: [] };
for (var i = 0; i < insMaterials.length; i++) {
var mtr = insMaterials[i];
alert(mtr);
var RequestItems = {
'InventoryItemsId': mtr.InventoryItemsId,
'Brand': mtr.Brand,
'ItemName': mtr.ItemName,
'Quantity': mtr.qty,
'RefNo': 3,
'Comment': mtr.remarks,
'Specification': mtr.specification,
'Types': mtr.types,
'Unit': mtr.qty
};
mr.RequestItems.push(RequestItems);
}
return JSON.stringify(mr);
}
function postMaterialRequest() {
$.ajax({
contentType: 'application/json',
async: false,
type: 'POST',
url: '/api/PostMaterial',
data: (createObject()),
success: function (data) {
console.info("Info Save " + data);
toastr.success('Request was submitted successfully!');
del();
},
failure: function (response) {
console.info('Failed to save.');
toastr.error('Failed to save.');
}
});
}
postAllItems();
setTimeout(postMaterialRequest, 3000);
Второй вывод — это то, что вы получаете, когда используете не
JSON.stringify: обычно это то, что вы получаете в консольном формате.