jquery ajax使用jsonp跨域设置jsonp: "callback"后端是不是也要判断下?

图片描述

图片描述

图片描述

后端给了我一个json接口,我在本地调用,所以用的是jsonp去跨域。但是直接输出“fail”,报了上图1的错误,点进去是图2直接是数据报错。是不是说明跨域成功了,但后端那有错误?

$.ajax({
            type : "get",
            async:false,
            url : url;,
            dataType : "jsonp",
            jsonp: "callback"
            success : function(json){
                alert(json);
                alert(json[0].name);
            },
            error:function(){
                alert('fail');
            }
        });

我设置一个jsonp: "callback",后端那是不是也要获取判断下,是不是这个问题造成的?

谢谢大家的帮助,问题解决了是后端给我返回的数据不是按照jsonp的格式返回的。

阅读 4.3k
评论
    7 个回答

    改成这样试试看,

    $.ajax({
            type : "get",
            async:false,
            url : url;,
            dataType : "jsonp",
            jsonp: "callback",
            jsonpCallback:"success_jsonpCallback",
            success: function(json){
              console.log(json);
            },
            error:function(){
              console.log('fail');
            }
        });

      服务端需要处理
      这是我司对于接口返回结果的处理方法

      if ($_GET['callback']) {
              $data = json_encode(['message' => $msg, 'code' => $code, 'return' => $data]);
              $callBack = isset($_GET['callback']) ? $_GET['callback'] : DEFAULT_CALLBACK;
              die($callBack . '(' . $data . ')');
          }
        • 47.2k

          使用jquery的$.getJSON方法可以:

          $.getJSON("other origin url",function(resp){
              console.log(resp)
          })

          按理说jsonp需要前后端要约定callback方法名才能起作用,但是这个getJSON方法在后端只单纯返回json数据的时候,也是可以获取返回结果的。

            jsonp: "callback",这个callback就是返回集合必须包含的头部,
            PHP 返回的json必须改成 echo "callback(".$json.")";
            把json内容放到你jsonp定义的头部里面

              你没有看到你的callback后面没有东西吗,你没定义回调函数跨域返回的数据传给谁?

              jsonp这个字段只是定义一个键值,服务器通过这个键值去获取你的回调函数名,再把需要传的数据传给回调函数返回,jsonp这个字段不定义也可以,默认值就是'callback'

              主要是jsonpCallback这个字段,这个字段定义的才是回调函数,另外你的错误截的应该不全,默认回调函数是jQuery内部生成的一个随机数

              最重要的一点是,既然都回调error了,为什么不看下error参数呢?error字段function(jqXHR,status,error),你看下你的status是不是parsererror,error是不是提示你jquery生成的随机回调没有被调用

              建议补充补充基础知识,包括楼上这些回答的

                看看后端返回的报文内容,应该返的是应该js文件,里面包含一个方法(jquery自动生成的最终会回调success的回调函数),会带有参数就是你想要后端返回的那些参数,一般是json格式的。这样可以排查是不是后端返回错误。

                  撰写回答

                  登录后参与交流、获取后续更新提醒

                  相似问题
                  推荐文章