我似乎遇到了从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 :(得分: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
方法正确地对paramList
对象进行JSON编码。此方法本身内置于现代浏览器中。如果您需要支持旧版浏览器,则可以在页面中加入json2.js脚本。