jQuery No' Access-Control-Allow-Origin'或解析错误

时间:2015-06-10 04:58:34

标签: javascript php jquery ajax json

我正在尝试使用来自其他服务器的ajax从我的服务器请求数据作为web服务。它返回由json_encode

生成的有效json
 {"reference":"","mobile":"","document":"","appointment":""}

为了避免访问控制允许来源问题,我使用了dataType作为' jsonp'。但是,每当我这样做时,我都会收到一个我无法解决的解析错误(尽管我也试图从其他人那里复制一些其他有效的json。

任何人都知道如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

好吧,jsonp应该是json padding的数据类型,不仅仅是任何 jsonjsonp 正常 json 包含在函数中。因此,当您收到jsonp时,您可以在闭包中使用该函数并获得所需的输出。 要避免跨浏览器问题,您有三种选择:

  1. 如果您可以控制服务器,则输出跨源标头和json。
  2. 你通过像curl这样的后端调用获得json。
  3. 您使用幻影JS(+ CasperJS让您的生活更轻松)刮擦页面并获取json。
  4. 如果你能够真实地描述你想要完成的事情,我可能会更好。

答案 1 :(得分:0)

使用Json进行CORS错误/访问控制允许来源问题我执行以下操作, 在API端,我确保标题设置为允许所有。我正在使用SLIM框架(php),但这可以在任何框架中完成。

function get_data(){
    .....(get the data from db)......
    $response->headers->set('Access-Control-Allow-Origin', '*');
    $response->headers->set('Cache-Control', 'no-cache'); 
    $response['Content-Type'] = 'application/json';
    $response->body(json_encode($result));
}

在jquery结束时,我会像这样调用API,

 $.ajax({   
    url: "http://api.example.com/v1/get-data",
    success: function(data) {       
        console.log(data);
    },
    error: function(){
        console.log('error');
    },
    method:"GET",
    async: true,
    });

如果上述因某些原因无效并且您必须使用jsonp,请执行以下操作: https://stackoverflow.com/a/6879276/4369851