最近在工作中碰到跨域调用的问题。当用jquery的$.ajax调用另一个域名服务器程序时在firefox下面能获取到返回值,但是返回值不被认为是一个正确的json格式。而在IE下面,直接会导致JS脚本错。

纠其原因,是因为使用了ajax的跨域。这种情况下需要使用jsonp。虽然以前也使用过jsonp,这里给自己做个总结,也给碰到问题的人提供帮助。

使用jsonp需要做的修改:

1.客户端调用时需要在URL后面增加jsonp=callbackFunction,并定义好会调的callbackFunction
  如:http://www.xxxx.xxx?jsonp=jsonCallback

    <script>
    function jsonCallback(result){
        
    }
    <script>

2.服务器端,如果服务器端原来需要返回的json格式如下:
{"message":"投票不存在","result":"","code":"400","header":null}
则返回的数据将会是函数类型的数据:
jsonCallback({"message":"投票不存在","result":"","code":"400","header":null})

在jquery中使用jsonp

$.getJSON
    <script>
     $.getJSON("http://www.xxxx.xxx&jsoncallback=?",
    function(data){

    });
    </script>

$.ajax

        $.ajax({
            type: "GET",
            url: 'http://www.xxxx.xxx/api/topic-show!byId?',
            data: "jsonCallback=?&topicId=" + topicId ,
            dataType: "json",
            success: function (msg) {

            }
        });