我陷入了这个我无法解决的问题。我尝试了很多解决方案,我也在 StackOverflow 上搜索并发现了许多旨在解决这个问题的问题,但没有什么对我有用。这是我的问题:我有这个功能
$.ajaxWS = function (options) {
options.url = app.siteUrl + options.url;
var data = JSON.stringify(options.data);
var defaults = {
type: "GET",
contentType: "application/json; charset=utf-8",
url: location.protocol + '//' + location.host + location.pathname,
dataType: "json",
cache: false,
crossDomain: true,
data: JSON.stringify(options.data),
converters: {
"text json": function (jsonString) {
var res = JSON.parseNet(jsonString);
if (res && res.hasOwnProperty("d")) res = res.d; //.net 3.5
return res;
}
},
success: function (response, textStatus, XMLHttpRequest) {
options.success(response, textStatus, XMLHttpRequest);
},
error: function (xhr, textStatus, errorThrown) {
if(xhr.status != 0)
options.error(xhr, textStatus, errorThrown);
}
};
var options = $.extend(defaults, options);
return $.ajax(options);
};
当我在字段数据中传递任何字符串时,就像这些
$.ajaxWS({
url: "urlFunction",
data: { field1: $('#text1').val(), field2: $('#text2').val() },
success: function(){
alert('Success!');
},
error: function(xhr, textStatus, errorThrown){
alert(errorThrown);
}
});
它总是返回这个错误
{"Message":"JSON primitive not valid: field1.","StackTrace":" in System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()\r\n in System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n in System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\r\n in System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\r\n in System.Web.Script.Services.RestHandler.GetRawParamsFromGetRequest(HttpContext context, JavaScriptSerializer serializer, WebServiceMethodData methodData)\r\n in System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"}
我找到了一个以这种方式引用参数的解决方案
data: { field1: "'" + $('#text1').val() + "'", field2: "'" + $('#text2').val() + "'" },
但这只是一种解决方法。我也经常使用 $.ajax 选项,例如
processData: false,
traditional: true,
或传递数据不与
data: JSON.stringify(options.data),
但只有
data: options.data,
或将其放在引号之间,但所有这些尝试都不起作用。我给你另一个信息:这个方法适用于整数和日期。只有字符串会产生问题。你知道如何解决这个问题吗?非常感谢你。