使用JSONP创建回调

时间:2015-01-21 01:26:07

标签: php jquery ajax 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[...]

如何让此回调起作用或如何正确定义?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

添加此参数:

&jsoncallback=? 

答案 1 :(得分:0)

我能够通过将回调更改为以下内容来修复PHP文件中的错误:

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

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