2016-02-04 6 views
0

Я не могу понять, почему я получаю эту ошибку. Когда я помещаю кавычки вокруг переменных, он буквально отправляет текст вместо переменной.Недопустимый примитив JSON: lookupID. "," StackTrace ":"

{ "Сообщение": "Недопустимый JSON примитива:. LookupID", "StackTrace":»в System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject() \ г \ п на System.Web.Script. Serialization.JavaScriptObjectDeserializer.DeserializeInternal (Int32 depth) \ r \ n в System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary (Int32 depth) \ r \ n в System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal (Int32 depth) \ r \ n в System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize (ввод строки, Int32 depthLimit, сериализатор JavaScriptSerializer) \ r \ n в System.Web.Script.Serialization.JavaScriptSerializer.Deserialize (JavaScriptSerializer serializer, String input, Тип типа , Int32 depthLimit) \ r \ n в System.Web.Script.Serialization.JavaScriptSerializer.Des erialize [T] (ввод строки) \ r \ n в System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest (контекст HttpContext, сериализатор JavaScriptSerializer) \ r \ n в System.Web.Script.Services.RestHandler.GetRawParams (метод WebServiceMethodDataData , HttpContext контекст) \ г \ п на System.Web.Script.Services.RestHandler.ExecuteWebServiceCall (HttpContext контекста, WebServiceMethodData methodData)», "ExceptionType": "System.ArgumentException"}

Мой Ajax функции:

function GetVisitDates(lookupID, IsMiscellaneous) { 
    $.ajax({ 
    type: "POST", 
    url: "Home.aspx/GetVisitDates", 
    data: "{ 'LookupID': lookupID, 'isMiscellaneous': IsMiscellaneous }", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    async: true, 
... 

Метод он призывает:

[WebMethod] 
    public static string GetVisitDates(int LookupID, bool isMiscellaneous) 

ответ

3

Вы должны сначала JSON.stringify() данные, прежде чем отправить его - к сожалению, .aspx WebMethods очень придирчивы о том, как они связывают параметры :)

Если вы используете F12 инструменты вашего браузера, чтобы посмотреть по фактическому POST запросу, вы увидите, что ваш код в настоящее время передает полезную нагрузку, как это:

LookupID=20&isMiscellaneous=true 

Однако для того, чтобы это правильно б Ind, она должна быть актуальной JSON, например:.

{LookupID: 20, isMiscellaneous: true} 

И вот где JSON.stringify приходит в

Вот код, который я использовал для репликации и подтвердить, что это решает проблему:

в Home.aspx.CS:

public partial class Home : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    [WebMethod] 
    public static string GetVisitDates(int LookupID, bool isMiscellaneous) 
    { 
     return string.Format("{0}-{1}", LookupID, isMiscellaneous); 
    } 
} 

На стороне клиента (в моем случае просто скрипт в Home.aspx):

$(document).ready(function() { 
      GetVisitDates(20, true); 
     }); 

     function GetVisitDates(lookupID, isMiscellaneous) { 
      var data = { 
       "LookupID": lookupID, 
       "isMiscellaneous": isMiscellaneous 
      }; 

      data = JSON.stringify(data); 

      $.ajax({ 
        type: "POST", 
        url: "Home.aspx/GetVisitDates", 
        data: data, 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        async: true, 
        success: function(data) { 
         console.log(data); 
        }, 
        error: function(xhr) { 
         console.log(xhr); 
        } 
       } 
      ); 
     } 

Наконец, here является ссылкой, что очень хорошо для использования Ajax с WebForms .. .надеюсь, это поможет!

+1

Это работает! Спасибо, я не использовал эту строку в asp '[ScriptMethod()]. ​​Кажется, что она работает без нее. Теперь я просто получаю ошибку jquery при просмотре возвращаемого значения –

+0

@ Mr.Robot - о том, что ScriptMethod было ошибкой, это не требуется, будет удалено. Если у вас возникли проблемы с возвращаемыми данными, просто отправьте еще один вопрос, и я уверен, что вы получите хороший ответ:) –

+0

Я сам понял это, я понял, что не использовал $ .each() правильно. –

0

Я верю, что цитаты выбросят его.

Я бы поставил JSON в свой переменный первый:

function GetVisitDates(lookupID, IsMiscellaneous) { 
var data = { 
    "LookupID" : lookupID, 
    "isMiscellaneous" : isMiscellaneous 
}; 

$.ajax({ 
type: "POST", 
url: "Home.aspx/GetVisitDates", 
data: JSON.stringify(data), 
contentType: "application/json; charset=utf-8", 
dataType: "json", 
async: true, 
... 

С другой стороны, это может работать, не совсем уверен, что на верхней части моей головы:

data: { 'LookupID': lookupID, 'isMiscellaneous': IsMiscellaneous }, 

EDIT: Стивен Брюне является правильный ответ. Вы хотите добавить JSON.stringify(). Я также обновил свой ответ.

Также смотрите: Invalid JSON primitive ERROR

+0

Я пробовал это, но у меня все еще была ошибка .... {«Сообщение»: «Недействительный примитив JSON: LookupID.», «StackTrace»: «... –

+0

Можете ли вы дать эту попытку: данные: JSON. stringify (data), – seN