jQuery AJAX调用ASP.NET WebMethod

我有以下jQuery AJAX请求:

function sendUpdate(urlToSend) { var code = AccessCode; var url = urlToSend; var options = { error: function(msg) { alert(msg.d); }, type: "POST", url: "webmethods.aspx/UpdatePage", data: "{ accessCode: " + code + ", newURL: '" + url + "' }", contentType: "application/json; charset=utf-8", dataType: "json", async: true, success: function(response) { var results = response.d; } }; $.ajax(options); } 

和相应的ASP.NET WebMethod:

 [WebMethod] public static bool UpdatePage(string accessCode, string newURL) { bool result = true; try { HttpContext.Current.Cache[accessCode + "l"] = newURL; } catch { result = false; } return result; } 

所有这些都曾经与“async:false”正常工作,但是我必须摆脱它,因为它会冻结浏览器,直到收到响应。 现在上面的AJAX请求返回“undefined”。

谁能告诉我它为什么会发生以及问题出在哪里?

谢谢。

你应该确保正确编码这个JSON。 JSON.stringify是最可靠的方法:

 data: JSON.stringify({ accessCode: code, newURL: url }) 

这可以确保即使codeurl变量包含一些危险的字符,这些字符也会在最终生成的JSON中破坏字符串连接,所有内容都将被正确编码。 JSON.stringify方法被自然地嵌入到现代浏览器中,但如果您需要支持遗留,则可以包含json2.js 。

另外,因为您的代码不再阻塞,所以如果您从某个按钮单击或表单提交调用此sendUpdate ,则通过返回false取消默认操作。

我的方式正常:

 [System.Web.Services.WebMethod()] public static string getHello(string str) { //do some things with str return str; } 

在文件.js中,我定义了这个函数来调用文件.cs中的webmethod:

 function CallServerFunction(StrPriUrl, ObjPriData, CallBackFunction) { $.ajax({ type: "post", url: StrPriUrl, contentType: "application/json; charset=utf-8", data: ObjPriData, dataType: "json", success: function (result) { if (CallBackFunction != null && typeof CallBackFunction != 'undefined') { CallBackFunction(result); } }, error: function (result) { alert('error occured'); alert(result.responseText); window.location.href = "FrmError.aspx?Exception=" + result.responseText; }, async: true }); } 

然后,调用use(在file.js中调用):

  var text = $("#textbox_send").val(); var myresult; CallServerFunction("Default.aspx/getHello", JSON.stringify({ str: text }), function (myresult) { if (text != "") $('#' + id).append('

' + $("#account_user").text() + ': ' + myresult.d + '

'); });

“未定义”可能是服务器错误的结果。如果您使用Firebug,Firefox(或任何良好的客户端调试工具),您可以找到服务器返回的错误。 粘贴错误(如果有)。

不过,我还注意到“accessCode”的“数据”未正确包含在引号内。

更正后的数据选项为:

 data: "{ accessCode: '" + code + "', newURL: '" + url + "' }", 

PS:由于’选项’在Jquery中有不同的含义,我建议将变量名称更改为’setting’。 将’var options’更改为’var settings’。 🙂