rescript-ajax
lib for sending ajax on rescript
Usage example
open AjaxBrowser
open AjaxParams
let sendQuerySelectHtmlElem: string => option<Dom.htmlElement> = %raw(`
function (qs) {
return document.querySelector(qs);
}
`)
@@warning("-26")
let sendGet = async () => {
switch sendQuerySelectHtmlElem("#getForm") {
| None => Js.Console.log("Can't send data")
| Some(htmlEl) =>
(await FormUrlencoded(#get, "/get")
->AjaxBrowser.sendAjaxFormData(collectFormData(htmlEl), [])
->ResultExn.thenTryMap(res => Js.Console.log(res.data))) //ResultExn - it's dev-dependency
->ResultExn.getExn
}
}
@@warning("+26")
%%raw(`
document.getElementById("sendGetBtn").onclick = sendGet;
`)
API
AjaxParams.resi
Module contains functions for working with params and formData
type formData
//Collect params object to formData
let structToFormData: 'p => formData
//Convert formData to js structure
let formDataToStruct: formData => {..}
let collectFormData: Dom.htmlElement => formData
let mergeFormData: (formData, formData) => formData
AjaxConfig.resi
Module contains functions and types for configurating extra request params
open AjaxParams
open WebTypes
type ajaxProtocol = [#http | #https]
type proxyConfig = {
protocol: ajaxProtocol,
host: string,
port: int,
auth: baseAuth,
}
type responseType = [
| #arraybuffer
| #document
| #json
| #text
| #stream
| #blob
]
type advAjaxParam =
| AjaxBaseUrl(string)
| AjaxHeaders(array<(string, string)>)
| AjaxTimeout(int)
| AjaxWithCredentials
| AjaxAuth(baseAuth)
| AjaxResponseType(responseType)
| AjaxXsrfCookieName(string)
| AjaxXsrfHeaderName(string)
| AjaxMaxContentLength(int)
| AjaxMaxBodyLength(int)
| AjaxMaxRedirects(int)
| AjaxProxy(proxyConfig)
| AjaxDecompress
AjaxManager.resi
Module contains AjaxManager abstraction for module, thats contains api for sending AJAX. Also contains MakeAjaxManager functor, thats allows to configure environment and data-parser for AjaxManager module.
open AjaxParams
open WebTypes
open AjaxConfig
type axios
type url = string
type action =
| FormUrlencoded(method, url)
| MultipartFormData(method, url)
type ajaxResponse<'d> = {
data: 'd,
status: int,
headers: unknown,
}
module type AjaxEnv = {
let getAxios: unit => axios
}
module type AjaxManager = {
let sendAjaxParams: (
action,
'p,
array<advAjaxParam>,
) => promise<result<ajaxResponse<unknown>, exn>>
let sendAjaxFormData: (
action,
formData,
array<advAjaxParam>,
) => promise<result<ajaxResponse<unknown>, exn>>
}
module type MakeAjaxManager = (AE: AjaxEnv) => AjaxManager
module MakeAjaxManager: MakeAjaxManager
AjaxNode.resi
AjaxManager reslizations for Node.js
open AjaxManager
module AjaxEnvNode: AjaxEnv
module AjaxNode: AjaxManager
AjaxBrowser.resi
AjaxManager reslizations for Browser
open AjaxManager
module AjaxEnvBrowser: AjaxEnv
module AjaxBrowser: AjaxManager
License
MIT
Author
Anatoly Starodubtsev tostar74@mail.ru