jQuery $.ajax request of dataType json will not retrieve data from PHP script

前端 未结 8 938
情话喂你
情话喂你 2020-11-30 03:31

I\'ve been looking all over for the solution but I cannot find anything that works. I am trying to get a bunch of data from the database and then via AJAX autocomplete input

相关标签:
8条回答
  • 2020-11-30 03:55

    Well, it might help someone. I was stupid enough to put var_dump('testing'); in the function I was requesting JSON from to be sure the request was actually received. This obviously also echo's as part for the expected json response, and with dataType set to json defined, the request fails.

    0 讨论(0)
  • 2020-11-30 03:56

    The $.ajax error function takes three arguments, not one:

    error: function(xhr, status, thrown)
    

    You need to dump the 2nd and 3rd parameters to find your cause, not the first one.

    0 讨论(0)
  • 2020-11-30 03:57

    I think I know this one...

    Try sending your JSON as JSON by using PHP's header() function:

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

    Though you are passing valid JSON, jQuery's $.ajax doesn't think so because it's missing the header.

    jQuery used to be fine without the header, but it was changed a few versions back.

    ALSO

    Be sure that your script is returning valid JSON. Use Firebug or Google Chrome's Developer Tools to check the request's response in the console.

    UPDATE

    You will also want to update your code to sanitize the $_POST to avoid sql injection attacks. As well as provide some error catching.

    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;
    
    }
    
    0 讨论(0)
  • 2020-11-30 03:57

    Try using jQuery.parseJSON when you get the data back.

    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);
    }
    
    0 讨论(0)
  • 2020-11-30 04:02
      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 讨论(0)
  • 2020-11-30 04:03

    If you are using a newer version (over 1.3.x) you should learn more about the function parseJSON! I experienced the same problem. Use an old version or change your code

    success=function(data){
      //something like this
      jQuery.parseJSON(data)
    }
    
    0 讨论(0)
提交回复
热议问题