javascript - jquery 3.1.0 如何触发回调

标签 javascript php jquery ajax

当我的 ajax 请求返回并带有我解析的 assoc 数组时,我喜欢的是处理 .fail().done() 的最佳方式。

这是我当前的代码,我当前的问题是.fail()。总是开火。

注意:我测试了我的 something.php ,它在失败或成功时给了我正确的响应,这是对我的 something 的实际响应.php

失败:

{
  "ac":"failed"
}

成功:

{
  "alias": "cd9d0e2e",
  "sso": "http://somethin.com/home/site/cd9d0e2e?dm_sso=2!dsa654654sa56d FGfre4f645465fTIxYWE3NGZkMzk0NGM3NzIyMWFhNWQyMTgifQ",
  "ru": "http://somethin.com/login/resetpwd?uuid=asd1as3d1as321d-4370-be5d-123a3s2d1a3sd13a2s",
  "ac": "something@sample.com",
  "fn": "Fish",
  "ln": "Fillet"
}



$(document).ready(function(){
    $('#btn-create').click(function(e){
       e.preventDefault();
       var cSite = createSite();
       cSite.done(sendMail).fail(failOption).always(alwaysOption);
    }
});

function createSite() {
     var promise = $.Deferred();
     $.ajax({
             url: 'something.php',
             method: 'POST',
         data:"template_id="+template_id+"&original_url="+original_url+"&email="+email+"&first_name="+first_name+"&last_name="+last_name
            }).then(function(data) {
                var dataa = JSON.parse(data);
                //debugger;
                if(dataa.ac === 'failed') {
                    promise.reject(dataa);
                } else {
                    promise.resolve(dataa);
                }
            });

            return promise;
        }
function sendMail(dataa) {
console.log(dataa);
}

最佳答案

您可以从 createSite 函数返回 promise

var cSite = createSite(); 然后与 .then.done、.always 或 .fail< 一起使用 等等

$(document).ready(function() {
  $('#btn-create').click(function(e) {
    e.preventDefault();
    var cSite = createSite();
    cSite.done(function(resp) {
      var dataa = JSON.parse(resp);
      sendMail(dataa);
    }).fail(failOption).always(alwaysOption);
  });
});

function createSite() {
  var promise = $.ajax({
    url: 'something.php',
    method: 'POST',
    data: "template_id=" + template_id + "&original_url=" + original_url + "&email=" + email + "&first_name=" + first_name + "&last_name=" + last_name
  })
  return promise;
}

function sendMail(dataa) {
  console.log(dataa);
}

关于javascript - jquery 3.1.0 如何触发回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41951286/

相关文章:

javascript - 悬停时如何向网页上的单词添加弹出(工具提示)定义?

javascript - 在 JSFiddle 中加载 Facebook API

php - PHP引起的奇怪故障

javascript - 自定义验证适用于服务器端,但不适用于客户端 asp mvc 5

javascript - 如何仅从数组中追加一次值

javascript - 如何使用 Javascript 填充选择框

javascript - Livecycle RegExp - 小数的问题

php - 写入数据库失败 : CakePhp Tuto

php - HTML 表单验证

javascript - 如何从有序列表中选择一个列表元素?