jQuery $ .ajax запрос dataType json не будет извлекать данные из PHP-скрипта - PullRequest
16 голосов
/ 01 марта 2011

Я все время искал решение, но не могу найти ничего, что работает.Я пытаюсь получить кучу данных из базы данных, а затем через автозаполнение полей ввода AJAX в форме.Для этого я решил использовать json, потому что почему бы и нет?В качестве альтернативы я подумал просто отослать обратно строку с разделителями, а затем токенизировать ее, что было бы намного проще и избавило бы меня от головной боли ... Хотя я решил использовать json, хотя, полагаю,Надо придерживаться этого и выяснить, что пошло не так!То, что происходит, - то, что, когда get_member_function () выполняется, в диалоговом окне предупреждения появляется ошибка и читает «[объект объекта]».Я попробовал это также с помощью запроса GET и установив для contentType значение «application / json;кодировка = UTF-8 ".Увы, без кубиков.Кто-нибудь может подсказать, пожалуйста, что я делаю не так?Будьте осторожны, Петр.

Моя функция javascript / jQuery выглядит следующим образом:

function get_member_info()
   {

   var url = "contents/php_scripts/admin_scripts.php"; 
   var id = $( "select[ name = member ] option:selected" ).val();

   $.ajax(
   {

      type: "POST",
      dataType: "json",
      url: url,
      data: { get_member: id },
      success: function( response ) 
      { 

          $( "input[ name = type ]:eq( " + response.type + " )" ).attr( "checked", "checked" );
          $( "input[ name = name ]" ).val( response.name );
          $( "input[ name = fname ]" ).val( response.fname );
          $( "input[ name = lname ]" ).val( response.lname );
          $( "input[ name = email ]" ).val( response.email );
          $( "input[ name = phone ]" ).val( response.phone );
          $( "input[ name = website ]" ).val( response.website );
          $( "#admin_member_img" ).attr( "src", "images/member_images/" + response.image );

      },
      error: function( error )
      {

         alert( error );

      }

   } );

}

и соответствующий код в "contents / php_scripts / admin_scripts.php" выглядит следующим образом:

   if( isset( $_POST[ "get_member" ] ) )
   {

      $member_id = $_POST[ "get_member" ];
      $query = "select * from members where id = '$member_id'";

      $result = mysql_query( $query );

      $row = mysql_fetch_array( $result );

      $type = $row[ "type" ];
      $name = $row[ "name" ];
      $fname = $row[ "fname" ];
      $lname = $row[ "lname" ];
      $email = $row[ "email" ];
      $phone = $row[ "phone" ];
      $website = $row[ "website" ];
      $image = $row[ "image" ];

      $json_arr = array( "type" => $type, "name" => $name, "fname" => $fname, "lname" => $lname, "email" => $email, "phone" => $phone, "website" => $website, "image" => $image );

      echo json_encode( $json_arr );

   }

Ответы [ 8 ]

24 голосов
/ 01 марта 2011

Мне кажется, я знаю это ...

Попробуйте отправить JSON как JSON, используя PHP header () function:

/**
 * Send as JSON
 */
header("Content-Type: application/json", true);

Несмотря на то, что вы передаете действительный JSON, jQuery $ .ajax так не считает, потому что в нем отсутствует заголовок.

Раньше jQuery нормально работал без заголовка, но он был изменен несколькими версиями назад.

ТАКЖЕ

Убедитесь, что ваш скрипт возвращает допустимый JSON. Используйте Firebug или Инструменты разработчика Google Chrome , чтобы проверить ответ на запрос в консоли.

UPDATE

Вы также захотите обновить свой код для очистки $ _POST, чтобы избежать атак с использованием SQL-инъекций. А также предоставить некоторые сообщения об ошибках.

if (isset($_POST['get_member'])) {

    $member_id = mysql_real_escape_string ($_POST["get_member"]);

    $query = "SELECT * FROM `members` WHERE `id` = '" . $member_id . "';";

    if ($result = mysql_query( $query )) {

       $row = mysql_fetch_array($result);

       $type = $row['type'];
       $name = $row['name'];
       $fname = $row['fname'];
       $lname = $row['lname'];
       $email = $row['email'];
       $phone = $row['phone'];
       $website = $row['website'];
       $image = $row['image'];

       /* JSON Row */
       $json = array( "type" => $type, "name" => $name, "fname" => $fname, "lname" => $lname, "email" => $email, "phone" => $phone, "website" => $website, "image" => $image );

    } else {

        /* Your Query Failed, use mysql_error to report why */
        $json = array('error' => 'MySQL Query Error');

    }

     /* Send as JSON */
     header("Content-Type: application/json", true);

    /* Return JSON */
    echo json_encode($json);

    /* Stop Execution */
    exit;

}
9 голосов
/ 01 марта 2011

Попробуйте использовать jQuery.parseJSON, когда получите данные обратно.

type: "POST",
dataType: "json",
url: url,
data: { get_member: id },
success: function(data) { 
    response = jQuery.parseJSON(data);
    $("input[ name = type ]:eq(" + response.type + " )")
        .attr("checked", "checked");
    $("input[ name = name ]").val( response.name);
    $("input[ name = fname ]").val( response.fname);
    $("input[ name = lname ]").val( response.lname);
    $("input[ name = email ]").val( response.email);
    $("input[ name = phone ]").val( response.phone);
    $("input[ name = website ]").val( response.website);
    $("#admin_member_img")
        .attr("src", "images/member_images/" + response.image);
},
error: function(error) {
    alert(error);
}
5 голосов
/ 01 марта 2011

Функция $.ajax error принимает три аргумента, а не один:

error: function(xhr, status, thrown)

Вам нужно выгрузить 2-й и 3-й параметры, чтобы найти причину, а не первый.

2 голосов
/ 01 марта 2011

В дополнение к заметке Макхерби, попробуйте json_encode( $json_arr, JSON_FORCE_OBJECT );, если вы используете PHP 5.3 ...

1 голос
/ 03 июля 2013
  session_start();
include('connection.php');

/* function msg($subjectname,$coursename,$sem)
    {
    return '{"subjectname":'.$subjectname.'"coursename":'.$coursename.'"sem":'.$sem.'}';
    }*/ 
$title_id=$_POST['title_id'];
$result=mysql_query("SELECT * FROM `video` WHERE id='$title_id'") or die(mysql_error());
$qr=mysql_fetch_array($result);
$subject=$qr['subject'];
$course=$qr['course'];
$resultes=mysql_query("SELECT * FROM course JOIN subject ON course.id='$course' AND subject.id='$subject'");
$qqr=mysql_fetch_array($resultes);
$subjectname=$qqr['subjectname'];
$coursename=$qqr['coursename'];
$sem=$qqr['sem'];
$json = array("subjectname" => $subjectname, "coursename" => $coursename, "sem" => $sem,);
header("Content-Type: application/json", true);
echo json_encode( $json_arr );


 $.ajax({type:"POST",    
                  dataType: "json",    
                   url:'select-title.php',
                   data:$('#studey-form').serialize(),
                   contentType: "application/json; charset=utf-8",
                   beforeSend: function(x) {
        if(x && x.overrideMimeType) {
            x.overrideMimeType("application/j-son;charset=UTF-8");
        }
    },
                   success:function(response)
                  {
                    var response=$.parseJSON(response)
                    alert(response.subjectname);
                    $('#course').html("<option>"+response.coursename+"</option>"); 
                    $('#subject').html("<option>"+response.subjectname+"</option>");

                  },
                  error: function( error,x,y)
                  {

                  alert( x,y );

              }
                   });
0 голосов
/ 17 декабря 2015

Ну, это может кому-то помочь.Я был достаточно глуп, чтобы поместить var_dump('testing'); в функцию, из которой я запрашивал JSON, чтобы убедиться, что запрос был фактически получен.Это, очевидно, также отражается как часть ожидаемого ответа json, а с dataType, установленным на json, запрос завершается неудачей.

0 голосов
/ 14 июня 2013
Try this...  
  <script type="text/javascript">

    $(document).ready(function(){

    $("#find").click(function(){
        var username  = $("#username").val();
            $.ajax({
            type: 'POST',
            dataType: 'json',
            url: 'includes/find.php',
            data: 'username='+username,
            success: function( data ) {
            //in data you result will be available...
            response = jQuery.parseJSON(data);
//further code..
            },

    error: function(xhr, status, error) {
        alert(status);
        },
    dataType: 'text'

    });
        });

    });



    </script>

    <form name="Find User" id="userform" class="invoform" method="post" />

    <div id ="userdiv">
      <p>Name (Lastname, firstname):</p>
      </label>
      <input type="text" name="username" id="username" class="inputfield" />
      <input type="button" name="find" id="find" class="passwordsubmit" value="find" />
    </div>
    </form>
    <div id="userinfo"><b>info will be listed here.</b></div>
0 голосов
/ 21 декабря 2011

Если вы используете более новую версию (более 1.3.x), вы должны узнать больше о функции parseJSON! Я испытал ту же проблему. Используйте старую версию или измените свой код

success=function(data){
  //something like this
  jQuery.parseJSON(data)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...