Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript函数调用jQuery函数_Javascript_Jquery_Json_Function_Getjson - Fatal编程技术网

使用Javascript函数调用jQuery函数

使用Javascript函数调用jQuery函数,javascript,jquery,json,function,getjson,Javascript,Jquery,Json,Function,Getjson,在实现此功能时遇到一些问题,特别是在使用$.getJSON()时。我想将jQuery中的getJSON函数封装在Javascript函数中,如下所示: function reload_data() { $.getJSON("data/source", function(data) { $.d = data; }); } 但是当我调用reload_data()时,它不会在内部执行jQuery函数。有什么想法吗 在函数中添加一个警报,以了解其被调用的情况 并尝试捕获

在实现此功能时遇到一些问题,特别是在使用$.getJSON()时。我想将jQuery中的getJSON函数封装在Javascript函数中,如下所示:

function reload_data() {
    $.getJSON("data/source", function(data) {
        $.d = data;
    });
}

但是当我调用reload_data()时,它不会在内部执行jQuery函数。有什么想法吗

在函数中添加一个警报,以了解其被调用的情况

并尝试捕获jQuery调用以查看是否存在错误

function reload_data() {
    alert('reload_data  start');
    try{
        $.getJSON("data/source", function(data) {
            $.d = data;
        });
     }
     catch (ex){
         alert ('error in jQuery call:' + ex)
     }
}

你告诉我们的还不够。我就猜一猜

如果您正在调用此函数,然后立即检查$.d的结果,这是行不通的,因为您没有时间完成异步AJAX请求

reload_data();
alert($.d); // What?!  It's not displaying the updated results?!
您必须使用回调结构,就像jQuery使用的那样,才能使其正常工作

reload_data(function() {
  alert($.d);
});

function reload_data(func) {
  $.getJSON("data/source", function(data) {
    $.d = data;
    //Execute the callback, now that this functions job is done
    if(func)
      func();
  });
}

谢谢大家的帮助,但解决方法其实很简单。这只是一个同步的问题。在重新加载JSON数据之前,页面正在重新加载,因此我没有看到错误

你怎么知道它没有执行这个函数?你在里面的线路上放了一个断点来检查吗?它执行得很好。我想这一定是因为$.d变量中的数据没有以脚本其他部分可以使用的方式刷新。你没有向我们展示足够的图片来给出准确的答案。顺便问一下,你为什么要将“d”变量挂在jQuery命名空间上?是的,这也是我的猜测。这就是为什么我问他是否确定函数没有被调用。毕竟,Ajax是异步的,这就引出了一个有趣的问题。我认为他可以将他的请求更改为同步,这可能会解决问题,尽管我认为这不是最好的解决方案,所以我将保留我的答案。无论是哪种方式,他都必须等待ajax的执行,然后才能对变量做任何事。我认为(但我不确定)如果调用保持异步,浏览器的UI将更具响应性。异步请求是平滑的,同步请求会导致浏览器挂起。