私は解決できないこの問題で立ち往生しています。私は多くの解決策を試しましたが、この問題を解決することを目的とした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,
または引用符の間に入れますが、この試みはすべて機能しません。別の情報を提供します。このメソッドは整数と日付で機能します。文字列のみが問題を引き起こします。問題を解決する方法について何か考えがありますか? どうもありがとうございました。