【发布时间】:2019-11-30 15:13:57
【问题描述】:
我正在将 ReactJS 与 ASP.NET Web 窗体一起使用,在自动完成组件的 onChange 中,调用了一个通用处理程序来更新数据源。
所以在 Autocomplete 组件的 onChange 中使用了 fetch API post call,奇怪的是有时我确实得到了响应,有时 fetch API 被阻止,如 chrome 开发人员工具中所见。在服务器端也应用了所有 CORS 标头,但不明白为什么它只是有时会失败。
错误
index.js:39 POST http://localhost:53107/INV/MKRF/Handlers/Handler.ashx net::ERR_BLOCKED_BY_CLIENT
索引.js
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
itemcodes: [],
selected: null,
qty: '',
rows: []
};
}
handlechange = (e) => {
//console.log(e);
this.setState({
selected: e.value
});
var data = new URLSearchParams();
data.append("method", "GetAllBAANItemCodes");
data.append("prefix", this.state.selected);
fetch('Handlers/Handler.ashx', {
method: 'POST',
headers: {
Accept: "application/json",
"Content-Type": "application/x-www-form-urlencoded",
"Access-Control-Request-Headers": "*",
"Access-Control-Request-Method": "*"
//'X-Requested-With': 'XMLHttpRequest'
},
credentials: "include",
body: data
}).then((response) => { response.json(); })
.then((data) => { this.setState({ itemcodes: data }); })
.catch(
(error) => console.log(error)
);
}
render() {
return (
<Autocomplete
dataSource={this.state.itemcodes}
value={this.state.selected}
onValueChanged={(e) => this.handlechange(e)}
placeholder={'Type first name...'}
/>
);
}
}
处理代码
Public Class Handler : Implements IHttpHandler
Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
Dim method As String = context.Request("method")
If method = "GetAllBAANItemCodes" Then
Dim prefix As String = context.Request("prefix")
Dim conBAAN As New SqlClient.SqlConnection
conBAAN.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings("BAAN").ConnectionString
conBAAN.Open()
Dim itemCodes As New List(Of String)
Dim cmdBAAN As New SqlClient.SqlCommand
cmdBAAN.Connection = conBAAN
cmdBAAN.Connection = conBAAN
cmdBAAN.CommandType = CommandType.Text
cmdBAAN.CommandText = <some query>
cmdBAAN.Parameters.AddWithValue("@SearchText", prefix)
Dim rdr As SqlDataReader = cmdBAAN.ExecuteReader
If rdr.HasRows Then
While rdr.Read
itemCodes.Add(rdr("t_item").ToString())
End While
End If
rdr.Close()
cmdBAAN.Dispose()
conBAAN.Close()
Dim js As New JavaScriptSerializer()
context.Response.ContentType = "application/json"
context.Response.Headers.Add("Access-Control-Allow-Origin", "*")
context.Response.Headers.Add("Access-Control-Allow-Methods", "*")
context.Response.Write(JsonConvert.SerializeObject(itemCodes))
【问题讨论】:
-
ERR_BLOCKED_BY_CLIENT 几乎总是意味着您有一些阻止请求的广告屏蔽扩展程序或隐私扩展程序。因此,请尝试关闭您的扩展程序,或在其他浏览器中尝试
标签: asp.net reactjs post webforms fetch-api