{"id":20004153,"url":"https://github.com/fffunction/please","last_synced_at":"2025-10-12T13:04:54.006Z","repository":{"id":25552680,"uuid":"28985725","full_name":"fffunction/please","owner":"fffunction","description":"A small and modern AJAX library with support for file uploads","archived":false,"fork":false,"pushed_at":"2016-09-25T15:59:47.000Z","size":1831,"stargazers_count":15,"open_issues_count":3,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-06T14:37:41.650Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fffunction.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-01-08T20:56:19.000Z","updated_at":"2020-11-17T21:05:42.000Z","dependencies_parsed_at":"2022-08-24T06:50:58.419Z","dependency_job_id":null,"html_url":"https://github.com/fffunction/please","commit_stats":null,"previous_names":["danreeves/please"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/fffunction/please","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fffunction%2Fplease","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fffunction%2Fplease/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fffunction%2Fplease/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fffunction%2Fplease/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fffunction","download_url":"https://codeload.github.com/fffunction/please/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fffunction%2Fplease/sbom","scorecard":{"id":398222,"data":{"date":"2025-08-11","repo":{"name":"github.com/fffunction/please","commit":"35b58ccd46cde450a23852f61b41ff34cf16670a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 1/28 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENCE:0","Info: FSF or OSI recognized license: MIT License: LICENCE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 3 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T19:31:46.644Z","repository_id":25552680,"created_at":"2025-08-18T19:31:46.644Z","updated_at":"2025-08-18T19:31:46.644Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279011468,"owners_count":26084947,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-12T02:00:06.719Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-13T05:28:43.540Z","updated_at":"2025-10-12T13:04:53.973Z","avatar_url":"https://github.com/fffunction.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Please\n\u003e *A small and modern AJAX library.*\n\n[![NPM](https://nodei.co/npm/please-ajax.png)](https://nodei.co/npm/please-ajax/)\n\n[![Build Status](https://travis-ci.org/fffunction/please.svg?branch=master)](https://travis-ci.org/fffunction/please)\n\n## Breaking changes in 2.0.0\n\nIt's no longer necessary to init with the window value. The library now references the window directly, since it'll always be used in a browser.\n\nOld syntax:\n\n```\nvar plz = require('please-ajax')(window);\n```\n\nNew syntax:\n\n```\nvar plz = require('please-ajax');\n```\n\n## Features\n\n - Small\n - Supports Promises\n - Supports file uploads, even in IE9\n - Accepts both FormData objects and forms serialised as strings\n - Supports CommonJS, AMD, and plain old globals.\n\n## Support\n\nSupports modern browsers and IE9+. IE9 requires an ugly hack with a iframe in order to do file uploads, and therefore doesn't support the same events. [How to handle IE9 form uploads](#ie9-form-uploads).\n\n## Usage\n\nDemo:\n[![view on requirebin](http://requirebin.com/badge.png)](http://requirebin.com/?gist=d88339076f95291bfddb)\n\nBasic:\n\n```\nvar plz = require('please-ajax');\n\nplz.get('http://danreev.es/', {\n    success: function (d) {\n        alert(d);\n    }\n});\n```\nPromise:\n\n```\nplz.get('http://danreev.es/', {\n    promise: true\n}).then(function success (d) {\n    console.log(d);\n}, function error () {});\n```\n\nUpload:\n\n```\nplz.post('http://danreev.es/', formData, {\n    fileForm: formEl,\n    loadstart: function (e) {\n        console.log('Started');\n    },\n    progress: function (e) {\n        console.log(e.loaded + '%');\n    },\n    load: function (e) {\n        console.log('Done');\n    },\n    success: function (e) {\n        console.log('Successful upload!');\n    },\n    error: function (e) {\n        console.log('Uh oh.');\n    }\n});\n```\n\n## API\n\n### please.get(url[, options])\n\n### please.put(url, data[, options])\n\n### please.post(url, data[, options])\n\n### please.delete(url[, options])\n\n### please.del(url[, options])\n\nAlias to please.delete because some browsers won't let you use the delete keyword. Get around this with either please['delete'] or please.del.\n\n### Options\n\n```\n// Defaults\n{\n    fileForm:  false, // Pass in the DOM node of the form if you're uploading files\n    promise:   false, // Set to true if you want to return a promise\n    success:   function () {}, // Success handler\n    error:     function () {}, // Error handler\n    loadstart: function () {}, // Start handler for file uploads\n    progress:  function () {}, // Progress handler for file uploads (Not in IE9)\n    load:      function () {}  // On load handler for file uploads\n}\n```\n\n### IE9 form uploads\n\nTo support IE9 AJAX uploads, you need to post the form to hidden iframe. Please handles all of that for you but requires two things.\n\nFirstly, it posts the form to the supplied URL with `?ie9` appended. It then checks for that page to contain a `200` message. This is how please knows that the upload has been successful, otherwise it's considered a failure (e.g 500).\n\nThe code currently doesn't support a URL that already has GET parameters, is fairly strict in what it expects, and requires a condition on the server side to support IE9 AJAX uploads. 💀\n\nPull requests welcome!\n\n[Read the related code](https://github.com/fffunction/please/blob/3dcf7fda1bd9ecd4a888d1ed24543e9f2b3d743c/src/please.js#L37-L71)\n\n[Create an issue](https://github.com/fffunction/please/issues/new?title=wat)\n\n[Ask the maintainer](https://twitter.com/intent/tweet?text=%40heydanreeves+%40fffunction+please-ajax+is+broken!!!)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffffunction%2Fplease","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffffunction%2Fplease","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffffunction%2Fplease/lists"}