duangong1979 2015-01-21 01:26
浏览 80
已采纳

使用JSONP创建回调

I'm attempting to access data cross domain (testing locally) but the data keeps failing to load.

$.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");
    }
  });

The PHP is as follows (function is called through a switch statement earlier in the file).

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).");";
}

Headers are set at the start of the PHP document.

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

The error I am receiving (if I run the PHP file by itself) is Undefined index: callback. The json string echoes fine as text after this error. (I have tried echo $_POST[...] as well).

How can I get this callback to work or how do I define it properly? Any help is appreciated.

  • 写回答

2条回答 默认 最新

  • duanli0453 2015-01-21 02:00
    关注

    I was able to fix the error in the PHP file by changing the callback to the following:

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

    The AJAX query now also retrieves the JSON data successfully.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵