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

沃德天_拉莫帅
  • 655

图片描述

图片描述

图片描述

后端给了我一个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的格式返回的。

回复
阅读 5k
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 . ')');
    }

使用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格式的。这样可以排查是不是后端返回错误。

你知道吗?

宣传栏