duangong1979
2015-01-21 01:26 阅读 73

使用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 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.

    点赞 评论 复制链接分享
  • drtldt55533 drtldt55533 2015-01-21 01:34

    add this parameter:

    &jsoncallback=? 
    
    点赞 评论 复制链接分享

相关推荐