关于jsonp获取数据的问题

我现在找到了一个可以查询快递信息的jsonp接口http://api.open.baidu.com/pae/channel/data/asyncqury?cb=回调函数&appid=4001&com=快递公司&nu=快递单号

先不给回调函数,查询示例如下http://api.open.baidu.com/pae/channel/data/asyncqury?cb=&appid=4001&com=zhongtong&nu=402364452772

这样得到的确实是标准的json数据(各位可以点击上面的地址去看看)。

但是我用jsonp却只能得到该数据的前两个属性,第三个属性就为undefined了。我的代码如下:

    var  queryStr="http://api.open.baidu.com/pae/channel/data/asyncqury?cb=handleResponse&appid=4001&&com=zhongtong&nu=402364452772";
  var script=document.createElement("script");
  script.src=queryStr;
  document.body.insertBefore(script,document.body.lastChild);

        function handleResponse(response) {
            console.log(response);
  }

理论上打印出的这个response应该就是完整的快递信息json对象,然而得到的却只有该对象前两个属性。请教各位这是哪里出了问题?


谢谢各位,现在发现用HTML文档运行这段代码确实没有任何问题。但是我这个项目是用smarty模板写的,是用php打开这个html文档的,这样就不能得到正确结果了。。。是php不支持jsonp还是smarty不支持jsonp?求教~

图片说明

看的正常啊。

我给你一个基于PHP的查询快递物流信息的API接口

1.KuaidiAPI.php

<?php
/**

  • Created by http://www.kuaidi.com
  • User: kuaidi.com PHP team
  • Date: 2016-03-02
  • 物流信息查询接口SDK
  • QQ: 2885643506
  • Version 1.0 */

class KuaidiAPI{

private $_APPKEY = ''; 

private $_APIURL = "http://highapi.kuaidi.com/openapi-querycountordernumber.html?";

private $_show = 0;

private $_muti = 0;

private $_order = 'desc';

/**
 * 您获得的快递网接口查询KEY。
 * @param string $key
 */
public function KuaidiAPi($key){
    $this->_APPKEY = $key;
}

/**
 * 设置数据返回类型。0: 返回 json 字符串; 1:返回 xml 对象
 * @param number $show
 */
public function setShow($show = 0){
    $this->_show = $show;
}

/**
 * 设置返回物流信息条目数, 0:返回多行完整的信息; 1:只返回一行信息
 * @param number $muti
 */
public function setMuti($muti = 0){
    $this->_muti = $muti;
}

/**
 * 设置返回物流信息排序。desc:按时间由新到旧排列; asc:按时间由旧到新排列
 * @param string $order
 */
public function setOrder($order = 'desc'){
    $this->_order = $order;
}

/**
 * 查询物流信息,传入单号,
 * @param 物流单号 $nu
 * @param 公司简码 $com 要查询的快递公司代码,不支持中文,具体请参考快递公司代码文档。
 * @throws Exception
 * @return array
 */
public function query($nu, $com=''){
    if (function_exists('curl_init') == 1) {

        $url = $this->_APIURL;

        $dataArr = array(
            'id' => $this->_APPKEY,
            'com' => $com,
            'nu' => $nu,
            'show' => $this->_show,
            'muti' => $this->_muti,
            'order' => $this->_order
        );

        foreach ($dataArr as $key => $value) {
            $url .= $key . '=' . $value . "&";
        }

        // echo $url;

        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HEADER, 0);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_TIMEOUT, 10);
        $kuaidresult = curl_exec($curl);
        curl_close($curl);

        if($this->_show == 0){
            $result = json_decode($kuaidresult, true);
        }else{
            $result = $kuaidresult;
        }

        return $result;

    }else{
        throw new Exception("Please install curl plugin", 1); 
    }
}

}


2.example.php
<?php

include 'KuaidiAPI.php';

//修改成你自己的KEY
$key = 'c684ab43a28bc3caea53570666ce9762';

$kuaidichaxun = new KuaidiAPi($key);

//设置返回格式。 0: 返回 json 字符串; 1:返回 xml 对象
//$kuaidichaxun->setShow(1); //可选,默认为 0 返回json格式

//返回物流信息条目数。 0:返回多行完整的信息; 1:只返回一行信息
//$kuaidichaxun->setMuti(1); //可选,默认为0

//设置返回物流信息排序。desc:按时间由新到旧排列; asc:按时间由旧到新排列
//$kuaidichaxun->setOrder('asc');

//查询
$result = $kuaidichaxun->query('111111', 'quanfengkuaidi');

//带公司短码查询,短码列表见文档
//$result = $kuaidichaxun->query('111111', 'quanfengkuaidi');

//111111 快递单号
//quanfengkuaidi 快递公司名称

var_dump($result);


使用说明:
1.KuadidiAPI.php 不需要修改改任何东西
2.example.php 按照说明使用
3.快递公司代码见快递公司代码技术文档(快递公司代码文档下载地址:https://pan.baidu.com/s/1qYtikSs)