GVKun编程网logo

在jQuery中使用getJSON函数时,回调函数不起作用

16

如果您想了解在jQuery中使用getJSON函数时,回调函数不起作用的知识,那么本篇文章将是您的不二之选。同时我们将深入剖析$.getJSON回调函数不执行、AJAX–JQueryGET回调不起作用

如果您想了解在jQuery中使用getJSON函数时,回调函数不起作用的知识,那么本篇文章将是您的不二之选。同时我们将深入剖析$.getJSON回调函数不执行、AJAX – JQuery GET回调不起作用,但JSON文件访问正常、javascipt jQuery中的简单递归函数不起作用、javascript – 为什么这个jquery.get函数不起作用?的各个方面,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

在jQuery中使用getJSON函数时,回调函数不起作用

在jQuery中使用getJSON函数时,回调函数不起作用

我试图在jQuery中使用getJSON函数导入一些数据并触发回调函数。回调函数未运行。但是,如果我使用get函数尝试相同的操作,则效果很好。奇怪的是,即使我将“
json”作为类型传递,它也可以与get函数一起使用。为什么会这样呢?我在Firefox 3和IE 7中测试了以下文件:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv=''Content-Type'' content=''text/html; charset=UTF-8''><title>ajax test</title><script type="text/javascript" src="/jquery-1.3.2.min.js"></script></head><body><input type="button" id="test1" value="get"><input type="button" id="test2" value="getJSON"><input type="button" id="test3" value="get with json type"><script type="text/javascript">$("#test1").click(function() {    $.get("index.html",        function(response) {            alert(''hi'');            //works        }    )});$("#test2").click(function() {    $.getJSON("index.html",        function(response) {            alert(''hi'');            //doesn''t work        }    )});$("#test3").click(function() {    $.get("index.html",        function(response) {            alert(''hi'');            //works        },        "json"    )});</script></body></html>

只要我访问的URL在同一个域中,这似乎都会发生。我尝试传递一些数据,但这没有什么不同。

当然,可以像在第3个测试函数中那样使用get函数来解决该问题,但是我仍然对为什么会发生这种情况感到好奇。

我知道这里有一个类似的问题,但没有回答我的问题。

答案1

小编典典

json必须有效,否则回调将不会触发。

$.getJSON回调函数不执行

$.getJSON回调函数不执行

最近做的项目遇到一个跨域请求做验证的问题,为了解决这个跨域问题,愁了老半天,最后发现jQuery提供的一个特别简单的方法,就是用jQuery.getJSON(url,[data],[callback])

jQuery的Api提供一个列子:

$.getJSON("http://api.flickr.com/services/Feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?",function(data){
$.each(data.items,function(i,item){
$("<img/>").attr("src",item.media.m).appendTo("#images");
if ( i == 3 ) return false;
});
});

说明一下注意事项:

1、请求地址一定要有 jsoncallback=? ,例如我请求 百度,传一个参数userName=123,应该这样写:http://www.baidu.com?userName=123&jsoncallback=? ,如果我不传参数userName,应该这样写:http://www.baidu.com?jsoncallback=?

2、第二个参数一定要是json格式键/值对的格式。例:{"email": "123@163.com"}

3、回调函数,您请求的地址需要返回数据,返回的数据必须是严格的json格式的数据,还需要用 参数jsoncallback加小括号包裹jsoncallback(json格式的数据),否则就会出现回调函数不会执行的问题。

下面有有两个页面参考:

a.jsp:

<html>
<head>
<title>TEST</title>
<script type="text/javascript" src="./jquery-1.6.2.min.js"></script>

<script type="text/javascript">
jQuery(function(){
$.getJSON("http://www.ma.com/ids/cn/b.jsp?email=123@163.com&callback=?",function(data){
alert(data.resultMsg);
});

});
</script>
</head>
<body>
</body>
</html>

b.jsp

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" errorPage="/error.jsp" %>

<% response.setContentType("application/json");//这个一定要加 String callback = request.getParameter("callback"); int status = 0; String remsg = "{\"resultMsg\":\""+status+"\"}"; %> <%=callback+"("+remsg+")"%>

AJAX – JQuery GET回调不起作用,但JSON文件访问正常

AJAX – JQuery GET回调不起作用,但JSON文件访问正常

我的代码看起来像这样:
$.get('http://files.mysite.com/data.json',function(data) {
    console.log(data);
},"jsonp");

当我从Firebug查看网络菜单时,我可以看到对我的JSON文件的有效调用,当我打开它时,它会获得所有信息.

但控制台保持沉默.没有AJAX调用的迹象,也没有我的数据记录.

我的AJAX调用与我的JSON文件不在同一个域中.这就是为什么我使用jsonp

有任何想法吗??

我不完全确定你的问题是什么,如果你得到一个结果但是控制台保持安静你可能会遇到JSON本身的问题…尝试 JSONLint来查找问题.

另外我建议你不要使用getJson等.

$.ajax({
    url: http://files.mysite.com/data.json,dataType: 'jsonp',cache: false,beforeSend: function () {
        console.log("Loading");
    },error: function (jqXHR,textStatus,errorThrown) {
        console.log(jqXHR);
        console.log(textStatus);
        console.log(errorThrown);
    },success: function (data) {
        console.log('Success');
        console.log(data);
    },complete: function () {
        console.log('Finished all tasks');
    }
});

这样你就可以获得一些错误处理和其他漂亮的小功能,你可以通过beforeSend添加一个加载微调器,并通过完整删除它:)

编辑:
用下面的错误函数替换错误函数,这应该让我们更好地了解问题是什么:)

error: function (jqXHR,errorThrown) {
  console.log(jqXHR);
  console.log(textStatus);
  console.log(errorThrown);
}

javascipt jQuery中的简单递归函数不起作用

javascipt jQuery中的简单递归函数不起作用

它不会运行,因为您从不调用该函数,只有在DOM准备就绪后才创建该函数。

const i = 3;
function blink(i) {
    if(i==0)
        return;
    $(".target h1").fadeToggle(1000);
    blink(i-1);
}
$(document).ready(function() {
  blink(i)
});
<html>
    <head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
    </head>
    <body>
        <div><h1>I am blinking.</h1></div> 
    </body>
</html>

javascript – 为什么这个jquery.get函数不起作用?

javascript – 为什么这个jquery.get函数不起作用?

我一直在尝试创建一个小页面,它只是从源文档更新一些值.页面加载正常,但我没有从请求的源获得结果. .fail函数运行,但textStatus和errorThrown值不会出现在弹出的alert()窗口中.

我对javascript和jquery很新.我试图将这些与网上发现的碎片混在一起来弄明白,但似乎没有任何效果.主要是,这是我认为我正在倒下的回应……

无论如何,这是代码:

<html>
    <head>
      <title></title>
      <script type="text/javascript" src="~/Scripts/jquery-1.9.1.js"></script>

  <script type="text/javascript">

    function update() {
      $.ajax({
        type: "GET",url: "http://192.168.2.86:15890/linearlist.xml",dataType: "xml"
      }).done(function (res) {
       //alert(res);
      }).fail(function (jqXHR,textStatus,errorThrown) {
        alert("AJAX call Failed: " + textStatus + "," + errorThrown);
      });
    }

  function GetData() {
    update();
    setTimeout(function () {
      GetData();
    },50);
  }
});

  </script>
</head>
<body>
<script type="text/javascript">
    GetData();
</script>
  <div> result div</div>
</body>
</html>

更新:

我已经更新了我的代码:@ Ian的回答.遗憾的是,它仍然无法正常工作.我没有得到textStatus或errorThrown结果.我已经尝试通过VS2012调试Internet Explorer,但它并没有让我走得太远.如果我将URL放入网页,我可以查看XML文档.

解决方法

$.get不接受一个参数作为对象文字;它接受了几个: http://api.jquery.com/jQuery.get/#jQuery-get1

你可能会想到$.ajax语法:http://api.jquery.com/jQuery.ajax/

无论如何,称之为:

$.get("http://192.168.2.86:15890//onair.status.xml",{},function (res) {
    var xml;
    var tmp;
    if (typeof res == "string") {
        tmp = "<root>" + res + "</root>";
        xml = new ActiveXObject("Microsoft.XMLDOM");
        xml.async = false;
        xml.loadXML(res);
    } else {
        xml = res;
    }
    alert("Success!");
},"text");

或者使用$.ajax:

$.ajax({
    type: "GET",url: "http://192.168.2.86:15890//onair.status.xml",dataType: "text"
}).done(function (res) {
    // Your `success` code
}).fail(function (jqXHR,errorThrown) {
    alert("AJAX call Failed: " + textStatus + "," + errorThrown);
});

使用fail方法,您可以看到发生错误以及一些详细原因.

根据http://192.168.2.86:15890的内容/位置,由于原始策略相同,您可能无法进行AJAX调用 – https://developer.mozilla.org/en-US/docs/JavaScript/Same_origin_policy_for_JavaScript

我知道你在成功回调中有一些逻辑,但我很确定你是否将dataType指定为“text”,res变量将始终是一个字符串.所以你的if / else不应该真的做太多 – 其他应该永远不会执行.无论哪种方式,如果您期望XML,那么将dataType指定为“xml”可能更容易.

我们今天的关于在jQuery中使用getJSON函数时,回调函数不起作用的分享就到这里,谢谢您的阅读,如果想了解更多关于$.getJSON回调函数不执行、AJAX – JQuery GET回调不起作用,但JSON文件访问正常、javascipt jQuery中的简单递归函数不起作用、javascript – 为什么这个jquery.get函数不起作用?的相关信息,可以在本站进行搜索。

本文标签:

上一篇jQuery ajax调用返回JSON解析错误(ajax返回的json数据如何解析)

下一篇Javascript中的ERR_INSECURE_RESPONSE处理技巧