tags:

views:

58

answers:

1

I’m having trouble getting a AJAX/JSON function to work correctly. I had this function grabbing value from a drop down box but now I want to use an anchor tag to set it's value.

I thought it would be easy to just use the onClick event to pass string to the function I was using for the drop down box but I get the alert in JSON onFailure event even though data gets added to MySQL. I tried removing the alert from onFailure event but then it doesn't add the data. The drop down still continues work work fine, no alerts. (I should note that removing the alert also broke my drop down box)

1st I add an onClick event…

<a href="<?php echo Settings::get('app.webroot'); ?>?view=schedule&action=questions" onmouseout="MM_swapImgRestore();" onmouseover="MM_swapImage('bre','','template/images/schedule/bre_f2.gif',1)" onclick="assignCallType('testing')";>

2nd I check main.js.php

    function assignCallType(type) {
    alert(type);
    new Request.JSON({
        url: "ajax.php", 
        onSuccess: 
            function(rtndata,txt){
                if (rtndata['STATUS'] != 'OK') 
                    alert('Status was not okay');
            },
        onFailure : 
            function () { 
            alert("onFailure") 
            }
    }).get({
        'action': 'assignCallType', 
        'call_type': type
    });    
}

3rd Ajax.php: the variable is back in PHP and values get added to MySQL but I get the Alert in the JSON onFailure event

if ($_GET['action'] == "assignCallType") {
    if ($USER->isInsideSales()) {
        $call_type = $_GET['call_type'];
        $_SESSION['callinfo']->setCallType($call_type);
        $_SESSION['callinfo']->save($callid);
        echo json_encode(array('STATUS'=>'OK'));
    } else {
        echo json_encode(array('STATUS'=>'DENIED'));
    }
}

Any idea where I am going wrong. The only difference between this and the working drop down is how the function was called, I used onchange="assignCallType(this.value)".

A: 

Does the callback for onFailure provide any arguments? For example in jQuery there are 3 arguments that can give you information about the error. I ran into a similar problem where the error callback kept getting called even though there was no connection error. The problem turned out to be badly-formed JSON. Can you confirm that your JSON is well-formed?

UPDATE

I just checked out the documentation for Request and noticed that onFailure can have xhr in its signature. Try taking a look at the status, statusText, and responseText attributes of the XMLHttpRequest object. That will give you a clue as to what's going wrong.

Try this:

onFailure: function(xhr) {
   console.log(xhr.status, xhr.statusText, xhr.responseText);
}
Vivin Paliath
I think your right--however I don't get the error with the drop down box... also if I leave out onFailure all together I doesn't add the data to mySQL, sorry I don't understand Mootools enough to check the XMLHttpRequest object.
Mikey1980
even if I have onFailure do anything but an alert it doesn't add data...man I'mm confused.
Mikey1980
Try changing the onFailure handler to what I've shown above in my answer.
Vivin Paliath