我试图在Typescript中找到HTTP post请求的示例,但只能找到使用Angular的示例.有人能告诉我找到这个的正确方向吗?或者在这里发布一个使用post和JSON数据获取JSON响应的快速示例.

推荐答案

2020年更新:

请注意,到目前为止,全球fetchavailable on all modern browsers and covers 95% of all web users.如果你需要IE的支持,请阅读原始答案.

MDN Doc | TypeScript Definition

如果该函数在windowglobal上下文中可用,则如下所示:

    fetch(input: RequestInfo, init?: RequestInit): Promise<Response>;

所以你可以做:

const response = await fetch(myUrl, {
  method: 'POST',
  body: content,
  headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'} });

if (!response.ok) { /* Handle */ }

// If you care about a response:
if (response.body !== null) {
  // body is ReadableStream<Uint8Array>
  // parse as needed, e.g. reading directly, or
  const asString = new TextDecoder("utf-8").decode(response.body);
  // and further:
  const asJSON = JSON.parse(asString);  // implicitly 'any', make sure to verify type on runtime.
}

原始答案:

如果您想在TypeScript中使用原生JavaScript函数来处理HTTP POST请求,请查看YouMightNotNeedJQuery上的JSONPOST个示例.通用域名格式.使用它,您可以实现自己的:

// Using callbacks:
function request<Request, Response>(
        method: 'GET' | 'POST',
        url: string,
        content?: Request,
        callback?: (response: Response) => void,
        errorCallback?: (err: any) => void) {

    const request = new XMLHttpRequest();
    request.open(method, url, true);
    request.onload = function () {
        if (this.status >= 200 && this.status < 400) {
            // Success!
            const data = JSON.parse(this.response) as Response;
            callback && callback(data);
        } else {
            // We reached our target server, but it returned an error
        }
    };

    request.onerror = function (err) {
        // There was a connection error of some sort
        errorCallback && errorCallback(err);
    };
    if (method === 'POST') {
        request.setRequestHeader(
            'Content-Type',
            'application/x-www-form-urlencoded; charset=UTF-8');
    }
    request.send(content);
}

// Using promises:
function request2<Request, Response>(
    method: 'GET' | 'POST',
    url: string,
    content?: Request
): Promise<Response> {
    return new Promise<Response>((resolve, reject) => {
        request(method, url, content, resolve, reject);
    });
}

XMLHttpRequest是一个内置的JavaScript类,包含在TypeScript打字中.

Typescript相关问答推荐

如何使用TypScript限制允许对JavaScript值进行的操作集?

类型缩小对(几乎)受歧视的unions 不起作用

等待的R没有用响应对象展开到R

TypScript如何在 struct 上定义基元类型?

使用`renderToPipeableStream`时如何正确恢复服务器端Apollo缓存?

类型脚本中没有接口的中间静态类

TypeScrip-将<;A、B、C和>之一转换为联合A|B|C

参数属性类型定义的REACT-RUTER-DOM中的加载器属性错误

缩小并集子键后重新构造类型

TypeScrip省略了类型参数,仅当传递另一个前面的类型参数时才采用默认类型

是否将自动导入样式从`~/目录/文件`改为`@/目录/文件`?

如何编写在返回函数上分配了属性的类型安全泛型闭包

如何在typescript中为this关键字设置上下文

下载量怎么会超过下载量?

在正常函数内部调用异步函数

在构建Angular 应用程序时,有没有办法通过CLI传递参数?

类型脚本中函数重载中的类型推断问题

换行TypeScript';s具有泛型类型的推断数据类型

我可以使用对象属性的名称作为对象中的字符串值吗?

剧作家测试未加载本地网址