Этот вопрос задавался и отвечал много раз, но я не могу заставить его работать. Мой вопрос выглядит так: one, и это one и third example.Итерация через массив объектов JSON
Что я хотел бы сделать, это заполнить поле варианта с объекта JSON, например, в this и this вопросов. Они все немного разные, но похожие, но я не могу заставить его работать. Вот мой код из веб-сервиса:
<System.Web.Script.Services.ScriptService()> _
<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class Service
Inherits System.Web.Services.WebService
<WebMethod()> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _
Public Function HelloWorld(ByVal p_productCategoryId As Integer) As String
Dim productCategory = ProductService.GetProductCategory(p_productCategoryId)
'Dim productList = ProductService.GetProducts(productCategory)
Dim productList = New List(Of Product)
For cnt = 1 To 3
Dim product = New Product(cnt)
product.Productname = cnt.ToString & "|" & cnt.ToString
productList.Add(product)
Next
Return productList.ToJSON
End Function
End Class
<System.Runtime.CompilerServices.Extension()> _
Public Function ToJSON(Of T)(p_items As List(Of T)) As String
Dim jSearializer As System.Web.Script.Serialization.JavaScriptSerializer = New System.Web.Script.Serialization.JavaScriptSerializer()
Return jSearializer.Serialize(p_items)
End Function
Если я использую следующий код:
function Test() {
$.ajax({
type: "POST",
url: "Service.asmx/HelloWorld",
data: "{'p_productCategoryId' : 1 }",
contentType: "application/json; charset=utf-8",
dataType: "json",
success:function(msg){
alert(msg.d)
},
error: function() {
alert("An error has occurred during processing your request.");
}
});
};
Я получаю этот результат:
[{"Id":1,"IsActive":false,"Category":null,"Productname":"1|1","Price":0},
{"Id":2,"IsActive":false,"Category":null,"Productname":"2|2","Price":0},
{"Id":3,"IsActive":false,"Category":null,"Productname":"3|3","Price":0}]
который, кажется, в порядке.
Если я удалю 'd' из msg. В результате в боевой готовности является:
[object Object]
код «работа в прогресс», чтобы заполнить поле параметра это (на данный момент :):
function Test() {
$.ajax({
type: "POST",
url: "Service.asmx/HelloWorld",
data: "{'p_productCategoryId' : 1 }",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
$("#prd_id").empty().append($("<option></option>").val("[-]").html("Please select"));
$.each(msg.d, function() {
$("#prd_id").append($("<option></option>").val(this['Id']).html(this['Productname']));
});
},
error: function() {
alert("An error has occurred during processing your request.");
}
});
};
Я попытался несколько способов заставить его работать с примерами, упомянутыми мной ранее, безрезультатно. Использование msg.d заполняется в поле опции с количеством символов в строке. Я попытался явно создать объект JSON из «msg» с помощью «getJSON». (Разве это не ват для типа данных?) Я не могу использовать именованные объекты, потому что у меня их нет, как вы можете видеть в образцах данных. Что мне не хватает?
Некоторые из того, как я не могу получить код, чтобы увидеть, что массив имеет три записи.
Из вашего живого примера я могу видеть, что «d» именованный объект. Что нет в моем сообщении из webservice. Это объясняет, почему это не сработало. В любом случае в вашем примере вы используете «d», так что это не сработает. Действительно здорово, что вы создали живой пример так быстро, хотя. – Sigur
@Sigur: Вы сказали, что предупредили «msg.d» и получили это, поэтому я предположил, что 'msg.d' был массивом (это то, что делает ASP.Net, я никогда не понимал почему). Если 'msg' - это массив, просто удалите' .d'. –
@ Сигур: Я добавил еще два примечания выше. –