2012-06-13 47 views
0

我似乎從調用jQuery的一個WebMethod的問題,我使用這篇文章作爲我的出發點是具有:的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「}

這導致了一個parseerror,我不確定爲什麼。

任何幫助表示讚賞。

感謝

+0

我認爲這不是正確的JSON。 JSON應該有無單鍵的鍵,並且值必須用引號括起來。刪除關鍵變量「AQ」和「SOQ」中的引號,然後嘗試 –

+0

您是否嘗試將參數列表構建爲對象而不是字符串?例如:'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