C# jQuery WebMethod解析错误
我似乎在从jQuery调用WebMethod时遇到了问题,我将本文作为我的出发点: JSC# jQuery WebMethod解析错误,c#,jquery,.net,C#,Jquery,.net,我似乎在从jQuery调用WebMethod时遇到了问题,我将本文作为我的出发点: JS function WebMethod(fn, paramArray, successFn, errorFn) { //----------------------------------------------------------------------+ // Create list of parameters in the form:
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
});
};
C#(注意这些是测试方法,忽略逻辑)
调试JS时,paramList似乎是正确的JSON(或者我相信是这样):
{“AQ”:“140000”,“SOQ”:“1169”}
这导致了一个语法错误,我不确定为什么
谢谢你的帮助
谢谢哦,不,请不要像您那样使用字符串操作手动构建JSON。那太可怕了。看一看 以下是正确的方法:
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
});
}
函数WebMethod(fn,paramArray,successFn,errorFn){
var paramList={};
如果(paramArray.length>0){
对于(变量i=0;i
注意使用
JSON.stringify
方法对paramList
对象进行正确的JSON编码。这种方法是内置在现代浏览器中的。如果您需要支持传统浏览器,可以将脚本包含到页面中。我认为这不是正确的JSON。JSON应该有不带单引号的键,并且值必须在引号中。删除关键变量'AQ'和'SOQ'的引号,并尝试将paramlist构建为对象而不是字符串吗?类似于:paramsList[paramArray[i]]=paramArray[i+1]
?根据$.ajax()文档,它应该在发送之前由jQuery正确序列化。我在使用JSON库时遇到各种冲突,因此我决定使用jQuery JSON库和数据:$.toJSON(paramList),这给了我以下JSON{“AQ”:“140000”,“SOQ”:“1169”},这仍然会导致“无效JSON”错误。为什么json库会返回不正确的json?
[WebMethod]
public static ContractsListPricing PriceContract(string AQ, string SOQ)
{
ContractsListPricing clp = new ContractsListPricing();
// clp.Aq = nAQ * 2;
// clp.Soq = nSOQ * 2;
return clp;
}
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
});
}