【问题标题】:Load Json data with AJAX and PHP使用 AJAX 和 PHP 加载 Json 数据
【发布时间】:2015-10-05 14:25:23
【问题描述】:

我正在尝试使用 ajax 加载 json 数据,但它不起作用。每次ajax调用错误函数并且不调用成功函数。

我的 AJAX 调用:

$(document).on("click", "#myMovies .btn-update", function() {
  var id = $(this).parent().data("id");

  $.ajax({
   url : 'index.php',
   type : 'POST',
   dataType: 'json',
   data : 'id=' + id + '&action=update',
   success : function(data){
      $('#updateMovie')
            .find('[name="title"]').val(data.title).end()
            .find('[name="list"]').val(data.list).end();
   },
   error : function(jqXHR, textStatus, errorThrown){
      console.log("error");
      alert(textStatus);
      alert(errorThrown);
   }

  });
});

index.php 中有趣的部分:

else if($_POST['action'] == "update") {
   /*getSpecificMovie($_POST['id']);
   $movies = getSpecificMovie();
   $results = Utils::secureMoviesJSON($movies);
   echo $results;*/

   header("Content-Type: application/json", true);
   $array = array(
     'title' => 'test',
     'list' => 'test');
   echo json_encode( $array, JSON_FORCE_OBJECT );
}

有人知道我的错误在哪里吗? 谢谢你的回答。

【问题讨论】:

  • 它是否在控制台中写入“错误”?什么 console.log("error", jqXHR, textStatus, errorThrown);在错误回调中打印?
  • 不确定,但您可以尝试将 data : 'id=' + id + '&action=update', 替换为 data : {'id': id, 'action' : 'update'},
  • 是的,控制台显示错误,然后 alert(textStatus) 显示:"parsererror" 和 alert(errorThrown) 显示:"synthaxError : Unexpected token
  • John C:不,它仍然不起作用:(

标签: javascript php jquery json ajax


【解决方案1】:

我认为问题出在“JSON_FORCE_OBJECT”选项上。请求预期的数据类型是 json 字符串。 json_encode函数添加JSON_FORCE_OBJECT时,json字符串对请求无效。

else if($_POST['action'] == "update") {
   /*getSpecificMovie($_POST['id']);
   $movies = getSpecificMovie();
   $results = Utils::secureMoviesJSON($movies);
   echo $results;*/

   header("Content-Type: application/json", true);
   $array = array(
     'title' => 'test',
     'list' => 'test');
   echo json_encode( $array);
   die();
}

还将 json 解析器添加到您的 javascript (parseJSON):

success : function(data){
    data = $.parseJSON(data);
      $('#updateMovie')
            .find('[name="title"]').val(data.title).end()
            .find('[name="list"]').val(data.list).end();
   },

【讨论】:

  • 你确定 php 脚本打印出来的唯一想法是 JSON 吗?也许在 echo 之后添加一个 die() 来测试?
  • 是的,我确定这就是我找不到解决方案的原因。如果我添加 die(); ajax 不调用成功或错误函数并在控制台中显示:“Uncaught SyntaxError: Unexpected token o”
猜你喜欢
  • 1970-01-01
  • 2015-08-16
  • 2017-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-24
  • 1970-01-01
相关资源
最近更新 更多