Подтвердить что ты не робот

Недопустимый примитив 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 одинаковых вопросов, но ни у кого из них нет ответов, которые я мог бы найти или которые работали для меня.

4b9b3361

Ответ 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());
    }
  });
}