jQuery ajax request with json response, how to?

后端 未结 5 926
一向
一向 2020-11-27 19:08

I am sending an ajax request with two post values, the first is "action" which defines what actions my php script has to parse, the other is "id" which i

相关标签:
5条回答
  • 2020-11-27 19:17

    Since you are creating a markup as a string you don't have convert it into json. Just send it as it is combining all the array elements using implode method. Try this.

    PHP change

    $response = array();
    $response[] = "<a href=''>link</a>";
    $response[] = 1;
    echo implode("", $response);//<-----Combine array items into single string
    

    JS (Change the dataType from json to html or just don't set it jQuery will figure it out)

    $.ajax({
       type: "POST", 
       dataType: "html", 
       url: "main.php", 
       data: "action=loadall&id=" + id,
       success: function(response){
          $('#main').html(response);
       }
    });
    
    0 讨论(0)
  • 2020-11-27 19:19

    Connect your javascript clientside controller and php serverside controller using sending and receiving opcodes with binded data. So your php code can send as response functional delta for js recepient/listener

    see https://github.com/ArtNazarov/LazyJs

    Sorry for my bad English

    0 讨论(0)
  • 2020-11-27 19:32

    Try this code. You don't require the parse function because your data type is JSON so it is return JSON object.

    $.ajax({
        url : base_url+"Login/submit",
        type: "POST",
        dataType: "json",
        data : {
            'username': username,
            'password': password
        },
        success: function(data)
        {
            alert(data.status);
        }
    });
    
    0 讨论(0)
  • 2020-11-27 19:33

    You need to call the

    $.parseJSON();
    

    For example:

    ...
    success: function(data){
           var json = $.parseJSON(data); // create an object with the key of the array
           alert(json.html); // where html is the key of array that you want, $response['html'] = "<a>something..</a>";
        },
        error: function(data){
           var json = $.parseJSON(data);
           alert(json.error);
        } ...
    

    see this in http://api.jquery.com/jQuery.parseJSON/

    if you still have the problem of slashes: search for security.magicquotes.disabling.php or: function.stripslashes.php

    Note:

    This answer here is for those who try to use $.ajax with the dataType property set to json and even that got the wrong response type. Defining the header('Content-type: application/json'); in the server may correct the problem, but if you are returning text/html or any other type, the $.ajax method should convert it to json. I make a test with older versions of jQuery and only after version 1.4.4 the $.ajax force to convert any content-type to the dataType passed. So if you have this problem, try to update your jQuery version.

    0 讨论(0)
  • 2020-11-27 19:35

    Firstly, it will help if you set the headers of your PHP to serve JSON:

    header('Content-type: application/json');
    

    Secondly, it will help to adjust your ajax call:

    $.ajax({
        url: "main.php",
        type: "POST",
        dataType: "json",
        data: {"action": "loadall", "id": id},
        success: function(data){
            console.log(data);
        },
        error: function(error){
             console.log("Error:");
             console.log(error);
        }
    });
    

    If successful, the response you receieve should be picked up as true JSON and an object should be logged to console.

    NOTE: If you want to pick up pure html, you might want to consider using another method to JSON, but I personally recommend using JSON and rendering it into html using templates (such as Handlebars js).

    0 讨论(0)
提交回复
热议问题