jQuery $.AJAX 替换为 JavaScript fetch - mvc4 方法参数始终为空

jQuery $.AJAX to replace with JavaScript fetch - mvc4 method arguments are always null

我们有一个有效的 jQuery 脚本调用 MVC4 C# 控制器方法,如下所示:

// C# controller method
public ActionResult MyMethod(String text, String number) 
{
    ... do something ...
    ... returns a partial view html result ...
}

// javascript call
var myData = { text:"something", number: "12" };
$.ajax({ url:ourUrl, type:"GET", data: myData, 
       success: function(data) { processAjaxHtml( data )}});

现在我们想将这个 $.ajax 调用替换为像这样的原生 fetch(...) 调用(并使用 Promise):

function startAjaxHtmlCall(url) {
     var result = fetch( url, {method: "GET", body: myData});
     return result.then( function(resp) { return resp.text(); });
}
starAjaxCall(ourUrl).then( resp => processAjaxHtml(resp) );

我们有问题,但不知为何找不到答案:

注意:我们在 Firefox 和 Chrome 中尝试过此操作,代码是由 IIS 托管的 MVC5、C#、.NET Framework 4.5(不是 .CORE!)。

我们将 javascript 调用更改为如下(然后一切又恢复正常):

var promise = new Promise((resolve, reject) => {
$.ajax({
        url: url,
        method: method,
        data: myData,
        success: function(data) { resolve(data); },
        error: function(error) { reject(error); },
    });
});

return promise;
    // note: .then( function(resp) { return resp.text(); }) // needs no more

那么:我们做错了什么?什么是我们不知道、不了解fetch的信息?在这种情况下如何正确替换 $.ajax 以获取?它可以再次与 GET 一起使用吗?如何修改控制器方法接收参数?

GET 请求没有 BODY,它们有查询字符串参数。使用 URLSearchParams 让事情变得简单

var myData = { text:"something", number: "12" };
return fetch('https://example.com?' + new URLSearchParams(myData))
    .then( function(resp) { return resp.text(); })

构建 URL

的其他方式
const url = new URL('https://example.com');
url.search = new URLSearchParams(myData).toString();
return fetch(url)...

如果您计划使用 post 请求向服务器发送 JSON

fetch('https://example.com', {
  method: 'POST',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(myData)
});