我陷入了這個問題,我無法解決。我嘗試了很多解決方案,我也搜索了很多問題,並在StackOverflow上找到了解決此問題的許多問題,但沒有任何方法適用於我。 這是我的問題: 我有這個功能JSON原始無效Ajax jQuery調用
$.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() + "'" },
但這只是一個解決方法。 我打了很多也與$就選擇像
processData: false,
traditional: true,
或者傳遞數據不
data: JSON.stringify(options.data),
,但只有
data: options.data,
或將其引號之間,但所有的這嘗試不起作用。 我給你另外一個信息:這個方法使用整數和日期。只有字符串給出問題。 你有什麼想法來解決這個問題嗎? 非常感謝。
我發現這也有點麻煩。我堅持使用JSON.stringify,因爲編寫所有這些引號會使代碼更容易出錯。有沒有理由不使用帶參數的函數?如果沒有,只要堅持有效。 – 2013-03-19 09:17:00