ajax的success: function (data)不执行怎么回事?

我有如下js函数

function poll() {
        console.log("id is: " + "${id}");
        var id = "${id}";
        $.ajax({
                url: '${urlbase}/poll',
                type: 'post',
                data: { id : id },
                dataType: 'json',
                success: function (data) {
                    console.log("success :" + data);
                    top.$.jBox.tip(data);
                    //alert(data);
                }
            })
            

$(document).ready(
        function () {
            ...
            poll();
            ...
        })

在firebug控制台我看到console.log("id is: " + "${id}"); 这一行执行OK
http请求也成功返回字符串,但是下面这两行却没有执行:

      console.log("success :" + data);
      top.$.jBox.tip(data);
      

可能的原因有哪些?

阅读 15.3k
13 个回答

使用ajax的时候要success和error一起用,方便了解错误

为什么要提这种问题?你确定请求发出去了?你确定返回成功了?没进 success 就是明显请求出问题了,去 network 看看不就知道了?

1、你的请求有问题,请求没有发出去 2、后台接口 有问题

以前碰到一个坑。ajax请求一个json数据,也有返回值,但是success就是不成功,原因是json里,被我写了两行注释。
其它猜测top.$.jBox.tip()`console.log`一下是否存在,因为异步出错的原因,也很大。

我觉得碰到这种的还是先准确的定位下问题吧。f12看看状态码,console.log()调试一下。

后台方法没执行成功,或者你的URL路径不对,也有可能参数传的个数不对,或者参数名没对应上

字符串格式错误,jQuery.parseJSON()解析不成功

前台后台debug走一圈...

你把error回调加上,看看是不是ajax失败,进了error. 另外即便后端响应成功,但是返回数据不是json格式串,也会进到error里面,不过这就是后端的问题了。

你返回的数据类型解析成json对象了,然而你却把对象数据当做字符串拼接起来打印,所以有问题console.log("success :" + data);
改成console.log("success :", data);试试

新手上路,请多包涵

参见得票最高的答案。success是请求成功的回调,没执行说明请求失败。加上error,或者看看后台有没有报错。

多半是后端返回的值不是正确的json格式,所以解析失败了就不进success了

看一下network里面的放回状态,然后再看看你们约定的数据格式是json,看看是不是后台给你返回的是字符串,这类问题有很多种情况的----

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏