2015-01-21 78 views
1

我正试图访问数据跨域(本地测试),但数据无法加载。使用JSONP创建回调

$.ajax({ 
    type: 'POST', 
    url: 'http://localhost/php/ajax/json.php', 
    dataType: 'jsonp', 
    data: {action: 'get_json'}, 
    success: function(data) { 
     console.log(data); 
    }, 
    error: function() { 
     console.log("Error loading data"); 
    } 
    }); 

PHP如下所示(函数通过文件中的switch语句调用)。

function get_json() { 
    $mysqli = db_connect(); 
    $sql = "SELECT * FROM json_test"; 
    $result = $mysqli->query($sql); 

    $rows = array(); 

    if ($result->num_rows > 0) { 
    while ($row = $result->fetch_assoc()) { 
     array_push($rows, $row); 
    } 
    } 

    echo $_GET['callback']."(".json_encode($rows).");"; 
} 

标题设置在PHP文档的开头。

header('Content-Type: application/json'); 

我收到了(如果我本身运行PHP文件)错误是Undefined index: callback。这个错误之后,json字符串可以很好地作为文本回显。 (我也试过echo $_POST[...])。

如何获得此回调工作或如何正确定义它?任何帮助表示赞赏。

+0

头部输出不正确,被浏览器视为脚本。 'jsonp'基本上是一个接收时执行的函数 – charlietfl 2015-01-21 03:00:30

回答

0

我能够通过改变回调下面以修复PHP文件中的错误:

$callback = ""; 
if (array_key_exists('callback', $_GET) == TRUE) { 
    $callback = $_GET['callback']; 
} 
echo $callback."('".json_encode($rows)."');"; 

的AJAX查询现在还检索JSON数据成功。

0

添加此参数:

&jsoncallback=?