将json请求的结果存储在变量中[重复]

问题描述 投票:0回答:1

我需要存储 json 响应的值以在另一个函数中使用。

我有这个代码:

const url_moodle = "https://xxxxx/xxxxx/app/appmoodlejson.php";

var moodleEmail = function (email){
  $.post( url_moodle, { "email":email, "postvar":"email" }, "json")
    .done(function( data, textStatus, jqXHR ) {
      if(data.data){
       // console.log(data.data.id_mdl);
       return data.data.id_mdl;
      }
      
    })
    .fail(function( jqXHR, textStatus, errorThrown ) {
      toastr.error('Error, contact support');
      if ( console && console.log ) {
        console.log( "Fail response: " +  textStatus);
      }
    });
};

var id_mdl = moodleEmail('[email protected]');

如果我进入浏览器控制台使用console.log,data.data.id_mdl显示正确的值,但如果我使用“return”来存储值,代码不会显示任何错误且没有功能。

请帮忙提供解决此问题的任何想法。

javascript jquery json return return-value
1个回答
-1
投票

问题是它是异步的,当您调用该方法时,在从发布请求返回响应之前它已经完成了调用。尝试将它包裹在一个承诺中,看看是否有效!

var moodleEmail = function(email) {
  return new Promise((resolve, reject) => {
    $.post(url_moodle, { "email": email, "postvar": "email" }, "json")
      .done(function(data, textStatus, jqXHR) {
        if (data.data) {
          // Resolve the promise with the response data
          resolve(data.data.id_mdl);
        } else {
          // Reject the promise if no data is found
          reject(new Error("No data found"));
        }
      })
      .fail(function(jqXHR, textStatus, errorThrown) {
        toastr.error('Error, contact support');
        if (console && console.log) {
          console.log("Fail response: " + textStatus);
        }
        // Reject the promise in case of an error
        reject(new Error("Request failed"));
      });
  });
};

// Example usage:
moodleEmail("[email protected]")
  .then(id => {
    console.log("ID:", id);
  })
  .catch(error => {
    console.error("Error:", error);
  });

© www.soinside.com 2019 - 2024. All rights reserved.