user1532468
user1532468

Reputation: 1753

Ajax returning object instead of data

What is the correct way to handle Ajax success callback events using jquery?

In my code, when I run instead of displaying data, it alerts object:object. However, if I use say msg.box it returns the data correctly.

I am trying to create an if statement where if text equals a certain word then the variable from json is placed in the html of the result div BA_addbox.

I cannot seem to get this to work and would be grateful if someone could point out my error. I have only included the relevant code as the form is posting the correct data and the php code is catching all the posts. Many thanks.

ajax code

$.ajax({
    type: "POST",
    url: "/domain/admin/requests/boxes/boxesadd.php",
    data: formdata,
    dataType: 'json',
    success: function(msg){
        if(msg == "You need to input a box") {
            $("#BA_addbox").html(msg.boxerrortext);
        }
        else {
            $("#BA_addbox").html(msg.box);
        }

        //alert(msg);
        console.log(msg);
        //$("#BA_addbox").html(msg.box);

        //$("#formImage .col_1 li").show();
        //$("#BA_boxform").get(0).reset();
        //$("#boxaddform").hide();
    }
});

boxesadd.php

$box = mysql_real_escape_string($_POST['BA_box']);
$boxerrortext = "You need to input a box";

if (isset($_POST['submit']))    {
    if (!empty($box)) {

        $form = array('dept'=>$dept, 'company'=>$company, 'address'=>$address, 'service'=>$service, 'box'=>$box, 'destroydate'=>$destroydate, 'authorised'=>$authorised, 'submit'=>$submit);

        $result = json_encode($form);

        echo $result;

    }
    else
    {

        $error = array('boxerrortext'=>$boxerrortext);

        $output = json_encode($error);

        echo $output;
        //echo "You need to input a box";

    }
}

Upvotes: 1

Views: 367

Answers (2)

bwoebi
bwoebi

Reputation: 23777

In javascript associative arrays are called objects, so there's no bug in the transmitted data.

Why do you compare msg to "You need to input a box"? You cannot compare object and string, this makes no sense.

if(typeof msg.boxerrortext !== "undefined" && msg.boxerrortext == "You need to input a box") {
    $("#BA_addbox").html(msg.boxerrortext);
} else {
    $("#BA_addbox").html(msg.box);
}

Upvotes: 4

Kundan Singh Chouhan
Kundan Singh Chouhan

Reputation: 14282

Try this instead:

if(msg.boxerrortext) {
  $("#BA_addbox").html(msg.boxerrortext);
}
else {
  $("#BA_addbox").html(msg.box);
}

Hope this will help !!

Upvotes: 1

Related Questions