使用asp.net的jQuery AJAX Post

我在jQuery ajaxpost上收到错误。

我在IE中收到的错误是SyntaxError:无效的字符。

整个项目可在以下url找到: http : //dragsort.codeplex.com/

当您将其中一个框移动到另一个位置(单击并拖动)时,会发生ajaxpost。

为了显示错误,我必须将错误ajax属性添加到jQuery ajax调用。

function saveOrder() { var data = $("#gallery li").map(function() { return $(this).attr("itemID"); }).get(); $.ajax({ url: "example.aspx/SaveListOrder", data: '{ids:["' + data.join('","') + '"]}', dataType: "json", type: "POST", contentType: "application/json; charset=utf-8", error: function(data, status, jqXHR) { alert(jqXHR); } }); }; 

代码背后的方法

 [WebMethod] public static void SaveListOrder(int[] ids) { for (int i = 0; i < ids.Length; i++) { int id = ids[i]; int ordinal = i; //... } } 

关于这个问题的任何想法? 提前致谢。

编辑/回答:

问题出在web.config中。 我在web.config中添加了以下httpModule

        

如果有人想详细说明为什么需要这样做会很棒。 一旦我被允许这样做,我会创建一个post作为答案。

谢谢!

对象键必须是双引号字符串。 实际上,JSON中的所有字符串都必须用双引号括起来。 在您的代码中, ids不是双引号。 你应该用这样的双引号括起来。

 data: '{"ids":["' + data.join('","') + '"]}', 

您可以使用JSONLint轻松validationJSON。

它可能与您返回的响应有关。 我认为IE要求应用程序也响应json内容类型。

尝试添加traditional: true到您的AJAX调用。 我相信你必须设置它才能让数组正确传递。 像这样

  $.ajax({ url: "example.aspx/SaveListOrder", traditional: true, data: '{ids:["' + data.join('","') + '"]}', dataType: "json", type: "POST", contentType: "application/json; charset=utf-8", error: function(data, status, jqXHR) { alert(jqXHR); } }); 

问题出在web.config中。 我在web.config中添加了以下httpModule

        

如果有人想详细说明为什么需要这样做会很棒。 一旦我被允许这样做,我会创建一个post作为答案。

谢谢!