javascript - 返回 ajax.done 数据在 jquery 上给出错误

标签 javascript jquery ajax

我的 ajax.done 中有数据,但它在 jquery 上出现错误。 我用谷歌搜索它但找不到任何东西。

要做什么?

function select_aragement(arragament){
  var arrst = arragament;
  var arrsplit = arrst.split("|");
  var periode = arrsplit[0];
  var id = arrsplit[1];
  var postsjson;
  var test= $.ajax({ 
    type: 'POST',
    async: true,
    url: 'ajax/prijzen.php',
    data: { id: id, periode: periode },
    dataType: 'json'
  }).done(function (vis) {
    console.log(vis);
    postsjson = $.parseJSON(vis);
  });
  return  postsjson;
}

最佳答案

您不应该尝试从回调函数返回任何内容,因为返回的值没有任何意义。相反,您只需使用该回调函数内 AJAX 请求的响应即可。

假设您有以下代码:

function bar() {
var myObject = foo();

// do something with myObject
}

function foo() {
    var bar; // 1

    var xhr = $.ajax({
        url: yourUrl,
        dataType: 'json',
        type: 'post',
        data: {
            some: 'data'
        }
    }); // 2

    xhr.done(function(yourObject) {
        bar = yourObject; // 5
    }); // 3

    return bar; // 4
}

bar();

foo 函数内的注释指示这些语句的执行顺序。因此,您声明一个变量 bar,声明一个具有 Deferred 对象的变量 xhr,使用回调函数向其附加一个 done 处理程序,返回bar 的值,然后设置 bar 的值(太晚了 - 您已经尝试返回它)。

在执行 bar 函数时,myObject 将是未定义的,因为 foo 内 bar 的值 函数未在 return 语句之前设置。您需要做的只是将 //do Something with myObject 代码移动到回调函数,并在那里使用 bar :

function foo() {
    var xhr = $.ajax({
        url: yourUrl,
        dataType: 'json',
        type: 'post',
        data: {
            some: 'data'
        }
    }); // 1

    xhr.done(function(yourObject) {
        var bar = yourObject; // 4
        // do something with bar
    }); // 2

    // 3 - function execution has finished
}

关于javascript - 返回 ajax.done 数据在 jquery 上给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20193893/

相关文章:

javascript - 尝试选择导航栏的最后一个元素

jquery - 使用 jQuery .animate 和 Bootstrap 定位 <div>

javascript - 禁用多次点击 JavaScript

javascript - 元素的 onClickOff() 事件提前触发

jquery - 跨域$.ajax

javascript - clearInterval 按钮不停止 setInterval 倒计时

javascript - 在 jQuery/javascript 中访问动态命名数组

javascript - jspdf 正在生成损坏的 pdf

javascript - 如何在 jQuery 中使用queue()

java - Ajax 调用失败时重定向到注销页面