Недопустимый примитив JSON: id
Я не могу заставить следующую функцию работать правильно. Кажется, что это неправильно. Речь идет о 5-й итерации различных вариантов данных. Я изначально просто делал данные: {'id': id}, как я делаю при работе с WCF, но с ASMX он просто не работает. Похоже, он сериализует данные как id = 1234 вместо id: 1234, но я довольно новичок в этом. Любая помощь будет оценена по достоинству. О, и я могу вызвать службу непосредственно в браузере, и он вернет данные правильно, поэтому я знаю, что это не сервис.
function getVentID(id) {
//look up id in database and get VentID
alert('id: ' + id);
var jsdata = { "id": + id}
$.ajax({
type: 'POST',
contentType: 'application/json; charset=utf-8',
url: 'services/UserService.asmx/getVentID',
data: jsdata,
dataType: 'json',
success: function (msg) {
alert(msg.d);
},
error: function (a, b, c) {
alert('Error: ' + a.toString() + ' ' + b.toString() + " " + c.toString());
}
});
}
p.s. Я знаю, что есть 10 одинаковых вопросов, но ни у кого из них нет ответов, которые я мог бы найти или которые работали для меня.
Ответы
Ответ 1
Самое простое исправление - изменить начало строки var jsdata
на:
var jsdata = '{id:' + id + '}';
Проблема заключается в том, что jQuery кодирует jsdata как данные формы, а не как json. Параметр dataType
влияет на то, как анализируется ответ, а не как кодируются данные POST.
На самом деле не существует кода JSON-кода сериализации в jQuery, насколько мне известно. Очевидно, Джон Ресиг предлагает использовать Douglas Crockford json2.js.
Чтобы использовать его, добавьте ссылку script на json.js, а затем:
var jstext = JSON.stringify(jsdata, null, 2);
Ответ 2
Я решил эту проблему прямо сейчас.
Вам необходимо передать URL-адрес в этом формате:
http://domain.com.br/service.asmx/method?objParam= {q: "search" }
И в вашем файле service.asmx вам нужно объявить этот метод:
Public Function method(objParam As Dictionary(Of String, String))
End Function
В вашем коде выглядит:
function getVentID(id) {
var jsdata = {
"id": +id
}
var sData = JSON.stringify(jsdata); //convert your json in string
$.ajax({
type: 'POST',
contentType: 'application/json; charset=utf-8',
url: 'services/UserService.asmx/getVentID',
data: {
id: sData
},
dataType: 'json',
success: function(msg) {
alert(msg.d);
},
error: function(a, b, c) {
alert('Error: ' + a.toString() + ' ' + b.toString() + " " + c.toString());
}
});
}