2012-06-13 6 views
0

я, кажется, возникли вопросы, требующие в WebMethod с JQuery, я использую эту статью как мой отправной точкой:JQuery WebMethod Ошибка синтаксического анализа

http://www.misfitgeek.com/2011/05/calling-web-service-page-methods-with-jquery/

JS

function WebMethod(fn, paramArray, successFn, errorFn) 
    { 
     //----------------------------------------------------------------------+ 
     // Create list of parameters in the form:        | 
     // {'paramName1':'paramValue1','paramName2':'paramValue2'}    | 
     //----------------------------------------------------------------------+ 
     var paramList = ''; 
     if (paramArray.length > 0) { 
      for (var i = 0; i < paramArray.length; i += 2) { 
       if (paramList.length > 0) paramList += ','; 
       paramList += '"' + paramArray[i] + '":"' + paramArray[i + 1] + '"'; 
      } 
     } 

     paramList = '{' + paramList + '}'; 

     //----------------------------------------------------------------------+ 
     // Call the WEB method             | 
     //----------------------------------------------------------------------+ 
     $.ajax({ 
      type: 'POST', 
      url: 'ContractView.aspx' + '/' + fn, 
      contentType: 'application/json; charset=utf-8', 
      data: paramList, 
      dataType: 'json', 
      success: successFn, 
      error: errorFn 
     }); 
    }; 

Я переходя в этот метод следующим образом:

$(".editableField").keydown(function(e) { 

        WebMethod('PriceContract', 
          [ 
          'AQ', aq.val(), 
          'SOQ', soq.val() 
          ], updateTextFields, failed); 

     }); 

C# (Примечание эти методы испытаний, игнорировать логику ..)

 [WebMethod] 
     public static ContractsListPricing PriceContract(string AQ, string SOQ) 
     { 
      ContractsListPricing clp = new ContractsListPricing(); 

      // clp.Aq = nAQ * 2; 
      // clp.Soq = nSOQ * 2; 

      return clp; 
     } 

При отладке JS paramList кажется правильным JSON (или я так считаю):

{» AQ ":" 140000 "," SOQ ":" 1169 "}

Это приводит к синтаксическому анализу, и я не уверен, почему.

Любая помощь приветствуется.

Благодаря

+0

Я думаю, что это не правильный JSON. JSON должен иметь ключи с единичными квотами, а значения должны быть в кавычках. Удалите кавычки из ключевой переменной «AQ» и «SOQ» и попробуйте –

+0

Вы пытались создать paramlist как объект, а не строку? Что-то вроде: 'paramsList [paramArray [i]] = paramArray [i + 1]'? Согласно документу $ .ajax(), он должен быть правильно сериализован jQuery перед отправкой – Tallmaris

ответ

1

О, нет, пожалуйста, не строить JSON вручную с помощью манипуляций со строками, как вы делали. Это абсолютно ужасно. Взгляните на this article.

Вот правильный путь:

function WebMethod(fn, paramArray, successFn, errorFn) { 
    var paramList = { }; 
    if (paramArray.length > 0) { 
     for (var i = 0; i < paramArray.length; i += 2) { 
      paramList[paramArray[i]] = paramArray[i + 1]; 
     } 
    } 

    $.ajax({ 
     type: 'POST', 
     url: 'ContractView.aspx' + '/' + fn, 
     contentType: 'application/json; charset=utf-8', 
     data: JSON.stringify(paramList), 
     dataType: 'json', 
     success: successFn, 
     error: errorFn 
    }); 
} 

Обратите внимание на использование метода JSON.stringify правильно JSON кодирования paramList объект. Этот метод встроен в современные браузеры. Если вам нужно поддерживать устаревшие браузеры, вы можете включить сценарий json2.js на свою страницу.

+0

У меня были всевозможные конфликты с использованием библиотеки JSON, поэтому я решил использовать библиотеку jquery-json и данные: $ .toJSON (paramList), который дает мне следующий JSON {«AQ»: «140000», «SOQ»: «1169»}, который по-прежнему приводит к ошибке «неправильного JSON». Почему библиотека json вернет неправильный JSON? – nik0lias