使用jQuery Ajax调用WebMethod提示‘PassDataToServer未定义’问题
解决jQuery Ajax调用WebMethod时的
'PassDataToServer' is not defined错误 我来帮你搞定这个问题!你遇到的错误核心是URL拼接时的变量引用错误,再加上参数格式的小问题,调整这几点就能正常工作了:
错误原因分析
你在jQuery Ajax的url里写了document.URL + "/" + PassDataToServer,这里的PassDataToServer被当作一个JavaScript变量,但你并没有定义过这个变量——它其实是后台C# WebMethod的名称,应该作为字符串来拼接。
另外,你手动给参数加单引号的方式会导致JSON格式错误,后台无法正确解析参数。
修正步骤及代码
1. 修正URL拼接
把方法名直接作为字符串拼到URL后,比如:
url: document.URL + "/PassDataToServer"
2. 正确序列化参数
用JSON.stringify()来生成符合要求的JSON参数,不要手动拼接字符串:
data: JSON.stringify({ id: id, clientData: inputData })
3. 处理ASP.NET的返回结果
ASP.NET的WebMethod会把返回值包裹在d属性里,所以success回调里要取result.d才能拿到真正的返回内容。
完整修正后的jQuery代码
function PassInputDataToServer(id, inputData) { $.ajax({ type: "POST", url: document.URL + "/PassDataToServer", data: JSON.stringify({ id: id, clientData: inputData }), contentType: 'application/json; charset=utf-8', dataType: "json", success: function (result) { // 取ASP.NET封装的d属性值 transferStatus.push(result.d); }, error: function (xhr, status, error) { transferStatus.push("failed"); console.error("请求失败详情:", error); }, complete: function () { transfersCompleted++; } }); }
额外注意事项
确保你的ASPX页面里已经启用了PageMethods,也就是ScriptManager要设置EnablePageMethods="True":
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="True"></asp:ScriptManager>
这是后台WebMethod能被前端Ajax访问到的必要配置。
内容的提问来源于stack exchange,提问作者LittleRain
相关产品推荐
相关产品推荐

