使用jsonp完成跨域请求,但是请求的链接是js文件,请求总是那个js报错,怎莫办?

把链接换成php就没问题。

    $.ajax({
        type:'GET',
        async:false,
        url:"http://app.veishu.com/jsonp/categories/all.js",
        dataType:"jsonp",
        success:function(data){
            alert("success");
   //         alert(data[0]);
   //         var dataHtml=""
   //         for(var i=0; data.length;i++){
   //             dataHtml+="<li><a href='#' id=''></a></li>";
            }
            $(".list").html(dataHtml);

        },
        error:function(){
            alert("ajax is error");
        }
    });
    这个ajax不会进入error,也没有进入success。
    在那个链接的js那报错。
    如果把链接换成php会成功进入success。
    但这个js文件的链接直接在浏览器打开也没有问题,可以出现json。不知怎么回事?
    还有浏览器打开js文件有unicode字符,该怎么转![图片说明](https://img-ask.csdn.net/upload/201504/25/1429951452_561399.png)

3个回答

你的这个地址又不支持jsonp,jsonp是一段可以执行的js代码。。你的这个地址只返回数据,应该也是跨域的,无法获取这种数据。

如果这个地址是你的,你应该输出类似

 mycallback({"success":true,"data":[{"name":"\u624b\u5de5DIY","position":0,"slug":"handicraft"},{"name":"\u8fd0\u52a8\u5065\u8eab","position":0,"slug":"sport"},{"name":"\u751f\u6d3b\u5bb6\u5c45","position":0,"slug":"life"},{"name":"\u6587\u5316\u6559\u80b2","position":0,"slug":"cultural"},{"name":"\u624d\u827a\u5a31\u4e50","position":0,"slug":"entertainment"},{"name":"\u7f8e\u5986\u9020\u578b","position":0,"slug":"dress-up"},{"name":"\u996e\u98df\u5065\u5eb7","position":0,"slug":"healthy-diet"},{"name":"\u5b55\u5987\u80b2\u513f","position":0,"slug":"pregnant-parenting"},{"name":"\u517b\u751f\u4fdd\u5065","position":0,"slug":"health-preserving"}]})

的代码,mycallback回调函数你自己再你的html页面写好。。如果你的all.js是重写过的,可以$_GET["callback"]得到jquery注册的回调函数


$_GET["callback"]."(你的那串json数据)";

如果你不能控制,你只能在你站点做代理了,用curl获取远程输出数据,ajax请求你的这个代理php页面

syyzz3
syyzz3 大哥,我正苦于这段接口不是我写的。没有callback,无从下手。 一见到跨域,我就想到是jsonp。痛苦一整天。 但是他用js写的。js文件直接在浏览器中打开就能看到代码内容, 难道他写死数据在js文件上?但我让他写的是从服务器查找的数据啊? 您帮我分析一下是不是他写错了?
接近 5 年之前 回复

大哥,我正苦于这段接口不是我写的。没有callback,无从下手。
一见到跨域,我就想到是jsonp。痛苦一整天。
但是他用js写的。js文件直接在浏览器中打开就能看到代码内容,
难道他写死数据在js文件上?但我让他写的是从服务器查找的数据啊?
您帮我分析一下是不是他写错了?

如果你认识写JS文件的程序,就让它加个CALLBACK,如果不认识,就用后台程序写个GET文件,再输出到相应页面,用本地JS去获取GET的数据,这样就不存在跨域问题了,除非是对方做了限制,不能让后台程序获取。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问