![](/img/trans.png)
[英]How do I send the results of a javascript method (JSON object) to the code-behind on asp.net webform?
[英]how to send json object to asp.net in javascript?
我試圖用javascript中的json字符串/對象調用asp.net控制器方法。
asp.net控制器:
public class HomeController : Controller
{
public ActionResult doWork(string data) {
// dowork..
return new EmptyResult();
}
}
並在JavaScript中是:
var XHR=new XMLHttpRequest();
XHR.open("GET", 'http://localhost:58476/home/dowork', true);
XHR.setRequestHeader("Accept","application/json");
XHR.onreadystatechange = function () {
if (XHR.readyState == 4 && XHR.status == 200) {
alert('ok');
}else{
alert('not ok');
}
};
XHR.send(JSON.stringify(queryResult));
如果運行javascripts,它將在asp.net中調用dowork方法,但數據為空。 在de onreadystatechange中,它正在調用'not ok'-alert。
在我的控制台日志中,我發現錯誤:
XMLHttpRequest無法加載http:// localhost:58476 / home / dowork 。 請求的資源上不存在“Access-Control-Allow-Origin”標頭。 因此不允許來源' http:// localhost:8081 '訪問。
有人知道如何解決這個問題嗎?
一個簡單的解決方案是添加Access-Control-Allow-Origin。
您可以將其添加到web.config文件中,如:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
此外,您只能在POST請求上發送數據,而您正在執行GET請求。 有關發送方法檢查w3schools的更多信息
這意味着您必須將XHR.Open方法更改為XHR.open("POST", 'localhost:58476/home/dowork', true);
顯然,javascript代碼正在向其他服務器發送請求,該請求最初是從最初加載頁面的服務器發送的。
第一個服務器正在偵聽端口8081,另一個正在偵聽端口58476。
由於同源策略 ,您無法將AJAX請求發送到托管JS腳本的服務器以外的任何服務器。
雖然您可以關閉此安全功能,但不建議將其關閉,除非您記住任何人都可以在您的頁面中注入Javascript代碼並使其向服務器發送可能包含敏感數據(如身份驗證Cookie)的請求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.