在 asp.net 中的 AJAX 调用未命中成功事件
Posted
技术标签:
【中文标题】在 asp.net 中的 AJAX 调用未命中成功事件【英文标题】:Not hitting success event on AJAX call In asp.net 【发布时间】:2021-01-30 16:34:05 【问题描述】:我正在尝试从服务绑定下拉。但是成功事件没有发生。
科学我总共有 5000 条记录,所以在
web.config 文件我添加了绑定可能是由于这个区域我收到“内部服务器错误”?我不确定这个请指导我哪里做错了
AJAX
var AllProduct = [];
function GetAllProduct()
var params = DivisionCode: $('#ddlDivision').val() ;
$.ajax(
type: 'GET',
contentType: "application/json; charset=utf-8",
data: JSON.stringify(params),
url: 'Header.aspx/GetProduct',
dataType: 'json',
async: false,
success: function (res)
Product(res.d)
OnSuccessProductCall();
);
function Product(pdata)
AllProduct = pdata;
function OnSuccessProductCall(data, status)
result = AllProduct;
$("[id$='ddlProduct']").append($("<option>").val("0").text("Select"));
if (result != undefined && result.length > 0)
for (i = 0; i < result.length; i++)
$("[id$='ddlProduct']").append($("<option>").val($.trim(result[i].BU_CAT_CODE)).text($.trim(result[i].BU_CAT_DESC)));
服务
调试时我可以看到我的服务返回数据集合但无法点击成功事件
[WebMethod]
public static ServiceReference1.PRODUCT[] GetProduct(string DivisionCode)
ServiceReference1.MasterDataServiceClient oClient = new ServiceReference1.MasterDataServiceClient();
ServiceReference1.PRODUCT[] prod = oClient.GetProducts(DivisionCode, null, null, null, null, null, null, null);
return prod;
Web.Cofig
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="basicHttp" allowCookies="true"
maxReceivedMessageSize="20000000"
maxBufferPoolSize="20000000">
<readerQuotas maxDepth="32"
maxArrayLength="200000000"
maxStringContentLength="200000000"/>
</binding>
<binding name="WSHttpBinding_IMasterDataService" />
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://almhosrwfebpm01.almaraigroup.local:8524/AlmaraiDataService.svc" binding="wsHttpBinding" bindingConfiguration="basicHttp" contract="ServiceReference1.IMasterDataService" name="WSHttpBinding_IMasterDataService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</client>
</system.serviceModel>
我的数据类型是JSON
来自 Web 服务的示例数据。
我在哪里做错了。
错误信息
"Message":"An attempt was made to call the method \u0027GetProduct\u0027 using a POST request, which is not allowed.","StackTrace":" at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"
【问题讨论】:
成功后添加error: function (request, status, error) alert(request.responseText);
,看看发生了什么。
同上,同时检查浏览器网络选项卡以查看通过您的 ajax 调用返回的确切内容
我收到此消息 "Message":"尝试使用 GET 请求调用方法 \u0027GetProduct\u0027,这是不允许的。","StackTrace":" 在系统.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException "
@freedomn-m 我可以看到网络标签什么都看不见
@PakawatSmutkun 我已经在评论区发布了关于错误事件的消息
【参考方案1】:
嗯,从技术上讲,您必须始终包含一个error
事件,以便您知道 ajax 调用何时失败并相应地处理它。忽略它显然是一种不好的做法。
其次,据我所知,WebMethod
不允许 GET
请求,您必须使用 POST
请求,以便它响应并正确发送数据,或者如果您严格想要在GET
请求中使用WebMethod
,那么你应该用这个属性来装饰你的WebMethod
:[ScriptMethod (UseHttpGet = true)]
这里是精炼的ajax
调用,试试这个,看看会弹出什么错误,然后再尝试解决。
var AllProduct = [];
function GetAllProduct()
var params = DivisionCode: $('#ddlDivision').val() ;
$.ajax(
type: 'POST', // Modified this to a POST call
contentType: "application/json; charset=utf-8",
data: JSON.stringify(params),
url: 'Header.aspx/GetProduct',
dataType: 'json',
async: false,
success: function (res)
Product(res.d)
OnSuccessProductCall();
,
error: function(err) // Added this event to capture the failed requests.
console.log(err);
);
// ... Your Further Code ...
【讨论】:
我已经更改了您建议的代码但是我在控制台选项卡上遇到错误,例如:POST localhost:26097/Header.aspx/GetProduct500(内部服务器错误) 这是一个服务器错误,我建议您转到网络选项卡,看看您是否点击了正确的端点以及传递的数据是否正常。 请检查我的更新代码我已经发布了网络标签 i bilevel 一切都很好,因为我得到了 200,即 OK 尝试在GET
请求中使用它,如错误消息中所示,您的服务方法似乎强制它使用GET
请求。然后看看是什么错误。
我已经从 POST 更改为 GET 但仍然相同的错误 500 内部服务器错误【参考方案2】:
添加这个而不是[WebMethod]
[WebMethod(EnableSession = true)]
[System.Web.Script.Services.ScriptMethod(UseHttpGet = true, ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]
public static ServiceReference1.PRODUCT[] GetProduct(string DivisionCode)
ServiceReference1.MasterDataServiceClient oClient = new ServiceReference1.MasterDataServiceClient();
ServiceReference1.PRODUCT[] prod = oClient.GetProducts(DivisionCode, null, null, null, null, null, null, null);
return prod;
An attempt was made to call the method \u0027GetNextImage\u0027 using a GET request, which is not allowed
【讨论】:
我已经从 type: 'POST' 改为 type: 'GET', @user14304386 如果您更改为“GET”但仍然收到有关使用“POST”的错误尝试 ctrl+f5 清除缓存。 @user14304386 尝试在控制器上添加断点以查看它是否被命中 @AlirezaMadad 我收到错误请检查我更新的代码 @PakawatSmutkun 我尝试使用您的提及代码,但我收到 500 Internal server error【参考方案3】:更改“数据:JSON.stringify(params)” 试试这个:
data: "obj:" + JSON.stringify(params ) + "",
在网络方法中: 1-将返回类型更改为无效。 2-添加此代码:
javascriptSerializer js = new JavaScriptSerializer();
Context.Response.Write(js.Serialize(prod));
这篇文章应该有助于: https://www.c-sharpcorner.com/blogs/how-to-retrieve-data-using-ajax-in-asp-net
【讨论】:
我有替换数据:“obj:”+ JSON.stringify(params)+“”,但仍然没有点击成功事件作为错误我得到这样的错误:“消息”:“尝试使用 POST 请求调用方法 \u0027GetProduct\u0027,这是不允许的。","StackTrace":" at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r \n 在 System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"以上是关于在 asp.net 中的 AJAX 调用未命中成功事件的主要内容,如果未能解决你的问题,请参考以下文章
来自弹出表单的 ajax 数据发布未命中控制器方法 ASP.NET MVC
AJAX 回调未显示成功消息 - ASP.NET MVC C#
来自 ASP NET Web API 的 CORS 阻止 Ajax POST 调用 - 对预检请求的响应未通过访问控制检查