Javascript - JQuery AJAX сообщение об ошибке, сводит меня с ума - PullRequest
3 голосов
/ 11 июня 2010

Не могу понять это.

У меня есть веб-сервис, определенный как (c #,. Net)

[WebMethod]
public string SubmitOrder(string sessionid, string lang,int invoiceno,string email,string emailcc)
{
   //do stuff.
   return stuff;
}

, который отлично работает, когда я тестирую его изавтоматически сгенерированный тест в Vstudio.

Но когда я вызываю его из jquery как

$j.ajax({
        type: "POST",
        url: "/wservice/baby.asmx/SubmitOrder",                     
        data: "{'sessionid' : '"+sessionid+"',"+
              "'lang': '"+usersettings.Currlang+"',"+
              "'invoiceno': '"+invoicenr+"',"+
              "'email':'"+$j(orderids.txtOIEMAIL).val()+"',"+
              "'emailcc':'"+$j(orderids.txtOICC).val()+"'}",
        contenttype: "application/json; charset=utf-8",         
        datatype: "json",
        success: function (msg) {
            submitordercallback(msg);
        },
        error: AjaxFailed
    });     

, я получаю забавную ошибку:

responseText: System.InvalidOperationException: Missing parameter: sessionid.    at  
System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection collection)    at  
System.Web.Services.Protocols.HtmlFormParameterReader.Read(HttpRequest request)    at  
System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()    at  
System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()  

данные оцениваются как1014 *

Хорошо, достаточно справедливо, но эта функция из jquery прекрасно взаимодействует с другим веб-сервисом.

Определено:

c #:

[WebMethod]
public string CheckoutClicked(string sessionid,string lang)
{
//*snip*

//jquery:

var divCheckoutClicked = function()
{
    $j.ajax({
        type: "POST",
        url: "/wservice/baby.asmx/CheckoutClicked",                     
        data: "{'sessionid': '"+sessionid+"','lang': '"+usersettings.Currlang+"'}",         
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            divCheckoutClickedCallback(msg);
        },
        error: AjaxFailed
    });     
}

Ответы [ 5 ]

3 голосов
/ 11 июня 2010
data: {sessionid: sessionid,
       lang: usersettings.Currlang,
       invoiceno: invoicenr,
       email: $j(orderids.txtOIEMAIL).val(),
       emailcc: $j(orderids.txtOICC).val()
        },
1 голос
/ 26 июля 2010

Вы можете упростить создание JSON и сделать его менее хрупким, используя JSON.stringify для преобразования объекта на стороне клиента в строку JSON.JSON.stringify встроен в новые браузеры как встроенная функция и может быть добавлен в более старые браузеры, включая json2.js .

* 1004 Дугласа Крокфордаиспользование JSON и объектов передачи данных с ASMX ScriptServices для некоторых примеров.Его примеры начинаются практически в том же положении, в каком вы находитесь в настоящее время, так что, надеюсь, это будет полезно.
1 голос
/ 03 июля 2010

См. http://encosia.com/2010/05/31/asmx-scriptservice-mistake-invalid-json-primitive/

Короткая версия: убедитесь, что данные заданы в виде строки, используя этот формат

// RIGHT $ .ajax ({type: 'POST', contentType: 'application / json', dataType: 'json', url: 'WebService.asmx / Hello', data: '{FirstName: "Dave", LastName: "Ward"}'});

itвнутри строки должны быть двойные кавычки.

0 голосов
/ 11 июня 2010

данные должны быть больше похожи на данные: {sessionid: sessionid, lang: usersettin ...

то, как вы сейчас его отправляете, это строка .. поэтому ваше приложение НЕ получает переменную sessionIDи это ценность.

Таким образом, он сообщает об ошибке.эта ошибка не является json, поэтому responseText выдает ошибку.

0 голосов
/ 11 июня 2010

удалить одинарные кавычки;

data: "{sessionid : "+sessionid+","+
              "lang: "+usersettings.Currlang+","+
              "invoiceno: "+invoicenr+","+
              "email:"+$j(orderids.txtOIEMAIL).val()+","+
              "emailcc:"+$j(orderids.txtOICC).val()+"}",
        contenttype: "application/json; charset=utf-8",     

и переместите фигурную скобку за пределы кавычек

...