Подтвердить что ты не робот

JQuery $.ajax запрос dataType json не будет извлекать данные из PHP скрипт

Я искал все решения, но я не могу найти ничего, что сработает. Я пытаюсь получить кучу данных из базы данных, а затем через поля ввода автозаполнения AJAX в форме. Для этого я решил использовать json, потому что почему бы и нет, не так ли? В качестве альтернативы я подумывал просто отправить обратно строку с разделителями, а затем подделать ее, что взамен было бы намного проще и избавило меня от головной боли... Так как я решил использовать json, я думаю, что я следует придерживаться его и выяснить, что пошло не так! Случается, что когда выполняется get_member_function(), в диалоговом окне предупреждения появляется сообщение об ошибке "[object Object]". Я пробовал это также с помощью запроса GET и установил contentType в "application/json; charset = 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 );

   }
4b9b3361

Ответ 1

Я думаю, что знаю этот...

Попробуйте отправить JSON как JSON с помощью функции PHP header():

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

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

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

также

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

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;

}

Ответ 2

Попробуйте использовать 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);
}

Ответ 3

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

error: function(xhr, status, thrown)

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

Ответ 4

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

Ответ 5

  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 );

              }
                   });

Ответ 6

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

success=function(data){
  //something like this
  jQuery.parseJSON(data)
}

Ответ 7

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>

Ответ 8

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