JavaScript-未捕获的TypeError:postData(…).则不是函数

前端之家收集整理的这篇文章主要介绍了JavaScript-未捕获的TypeError:postData(…).则不是函数 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我已经设置了一个按钮,单击该按钮将通过获取发布数据并创建警报.但是,我首先检查以确保某些输入不为空.如果输入元素没有值,我尝试返回一个字符串,告诉我哪个输入元素值是空的.当我这样做时,会出现“ Uncaught TypeError:postData(…).then not a function”错误.我也看了Uncaught TypeError: $.get(…).then is not a function,但无法弄清楚.任何帮助将不胜感激.谢谢!

  1. document.getElementById("sbmForm").onclick = function () {postData(`/projectInfo`)
  2. .then(result => alert(JSON.stringify(result))) // JSON-string from `response.json()` call
  3. .catch(error => alert(error))};
  4. function postData(url = ``) {
  5. // get form data from local storage
  6. var data = {};
  7. var unqVal = document.getElementById("unq_num").innerHTML;
  8. unqVal = "--??**" + unqVal;
  9. // keys that can not be empty
  10. var notEmpty = ["comp_name","compaddr_str_num","compaddr_str_nam","compaddr_city","compaddr_state","compaddr_zipcode","proj_name","projaddr_str_num","projaddr_str_nam","projaddr_city","projaddr_state","projaddr_zipcode","contact_fname","contact_date"];
  11. /* get all keys and values from local storage and store them in dict to send to server */
  12. var keys = Object.keys(localStorage);
  13. var i;
  14. for (i=0; i < keys.length; i++){
  15. var val = localStorage.getItem(keys[i]);
  16. // if unq val is in string,add it to the data
  17. var indexOf = keys[i].indexOf(unqVal);
  18. if (indexOf != -1){
  19. var keyNU = keys[i].substring(0,indexOf);
  20. // if value is in array
  21. if (notEmpty.includes(keyNU)){
  22. // if value is empty
  23. if (!val){
  24. alert(keyNU + " cannot be empty!");
  25. /**** ERROR OCCURS HERE *****/
  26. return keyNU + " cannot be empty!";
  27. }
  28. }
  29. data[keys[i]] = val;
  30. }
  31. }
  32. // Default options are marked with *
  33. return fetch(url,{
  34. method: "POST",headers: {
  35. "Content-Type": "application/json",},body: JSON.stringify(data),// body data type must match "Content-Type" header
  36. })
  37. .then(response => response.json()); // parses response to JSON
  38. };
最佳答案
当检测到“错误”时,您将返回一个字符串值而不是promise. then方法仅在promise上存在.

将您的函数更改为async,以便默认情况下返回一个Promise.

  1. async function postData(url = ``){}

然后通过更改此方法在需要发生时抛出错误(将由catch方法捕获)

  1. /**** ERROR OCCURS HERE *****/
  2. return keyNU + " cannot be empty!";

  1. throw new Error(keyNU + " cannot be empty!");

最后,为您获取

  1. //fetch returns a promise,so use await
  2. const res = await fetch(url,{
  3. method: "POST",headers: {
  4. "Content-Type": "application/json",// body data type must match "Content-Type" header
  5. });
  6. //res.json() returns a promise,so use await
  7. return await res.json();

猜你在找的JavaScript相关文章