无法将数据传递给函数(jQuery)

时间:2014-03-09 17:59:05

标签: javascript jquery ajax

我正在尝试将结果成功传递给另一个函数,它只是返回一个未定义的值:

function tagCustomer(email, tags) {
   var o = new Object();
   o.tags = tags;
   o.email = email;
   o.current_tags = getCustomerTags(email);
   o.new_tags = tags;
   console.log(o);
   return true;
}

function returnData( data ) {
    return data;
}

function getCustomerTags(email) {
   $.ajax({
      url: "xxx.io/index.php",
      type: "POST",
      dataType: "json",
      data: {email: email, "action": "getCustomerTags"},
      contentType: "application/x-www-form-urlencoded; charset=utf-8",
      success: function (data) {
      returnData( data );
         return data;
      }     
   });
}

o.current_tags应获得getCustomerTags的结果。

3 个答案:

答案 0 :(得分:1)

您应该将getCustomerTags更改为类似的内容,因为它会发出异步请求:

function getCustomerTags(email) {
    return $.ajax({
        url: "xxx.io/index.php",
        type: "POST",
        dataType: "json",
        data: {
            email: email,
            action: "getCustomerTags"
        },
        contentType: "application/x-www-form-urlencoded; charset=utf-8",
    });
};

然后像这样使用它:

getCustomerTags(email).done(function(data) {
    console.log(data)
});

您正常的方法在这里不起作用,因为您在从服务器返回响应之前尝试返回。相反,您使用回调函数或承诺。

答案 1 :(得分:-1)

您依赖于ajax响应来从函数返回数据。但是默认情况下,ajax是异步的,不等待服务器响应。因此你的功能不会返回任何东西。

答案 2 :(得分:-2)

试试这个(这对UI不好,但是使用你当前的代码它会起作用,看看我答案底部的“更好的实践”):

function getCustomerTags(email) {
    var result = null;
    $.ajax({
        url: "xxx.io/index.php",
        type: "POST",
        dataType: "json",
        async: false,
        data: {
            email: email,
            "action": "getCustomerTags"
        },
        contentType: "application/x-www-form-urlencoded; charset=utf-8",
        success: function (data) {

            result = data;
        }

    });
    return result;
}

你的代码不起作用的原因是$ .ajax成功函数返回data var,但getCustomerTags没有返回任何内容。另外,请注意“async:false”,因为如果将其用作异步,则该函数将返回null,因为它将在ajax完成之前返回。

更好的实践
ajax函数有一个回调(成功),使用它! 设计你的代码不是作为等待ajax请求结果的方法,,而是作为一个ajax请求,在它完成后做一些事情!

示例

function tagCustomer(email, tags, data) {
   var o = new Object();
   o.tags = tags;
   o.email = email;
   o.current_tags = data
   o.new_tags = tags;
   console.log(o);
   return true;
}

function getCustomerTags(email, tags) {
   $.ajax({
      url: "xxx.io/index.php",
      type: "POST",
      dataType: "json",
      data: {email: email, "action": "getCustomerTags"},
      contentType: "application/x-www-form-urlencoded; charset=utf-8",
      success: function (data) {
          tagCustomer(email, tags, data);
      }     
   });
}

如果您有任何其他问题,请随时发表评论。