php - Why is it that sometimes I have to JSON.parse() my AJAX response? -


i have non-uniformity how client-side jquery handles json ajax responses via server-side php.

here 2 example ajax calls have:

function checkorders() {      $.ajax({         type: "post" ,         url:"/service/index.php" ,         data: {             q: "checkorders"         } ,         complete: function(result) {              // note here json.parse() clause             var x = json.parse(result.responsetext);              if (x['unhandled_status']>0) {                  noty({                     text: '<center>there <b>'+x['unhandled_status']+'</b> unhandled orders.',                     type: "information",                     layout: "topright",                     modal: false ,                     timeout: 5000                      }                 });                           }          } ,          xhrfields: {             withcredentials: true         }     });  } 

note in above example have json.parse() responsetext php page in order deal object. somehow sees overall php response object, , have pull responsetext object , json.parse() it, in order use it.

now here ajax call have, whereby returned response, can use directly json response - meaning, somehow php page not return full "object" returns json , ajax call somehow knows json , not need json.parse() it:

function getunfiledorders() {  $.ajax({     type: "post" ,     url:"/service/index.php" ,     data: {         querytype: "getunfiledorders"     } ,     success: function(result) {          if (result['total_records'] >0) {             noty({                 text: result['response'],                 type: "error",                 modal: false,                 dismissqueue: true,                 layout: "topright",                 theme: 'defaulttheme'             });         }     } ,     xhrfields: {         withcredentials: true     } });  } 

in case, not need json.parse() responsetext in order treat response json object.

both php response scripts this:

 header('content-type:application/json');  $array = array("total_records"=>3,"response"=>"success");  echo json_encode($array); 

can clue me in on non-uniformity?

edit:

i realized had 2 different callbacks in each of above ajax calls. 1 on complete , other on success.

when switched them both success returned response ajax request handled uniformly.

so guess question is:

  • why there non-uniformity between these 2 callbacks?
  • which better use?

i thoroughly reviewed docs on $.ajax() covered here.

anyway, simplicity complete , success have different variables loaded in function.

complete returns this:

complete
type: function( jqxhr jqxhr, string textstatus )

success returns this:

success
type: function( data, string textstatus, jqxhr jqxhr )

when have complete, first parameter returned object why have use:

complete: function(data) {  var x = json.parse(data.responsetext); } 

as having fetch responsetext in object returned - , has string value (not formatted json).

the success function returns, first variable, whatever passed through php. in case json_encoded string. returns , can play around returned no further manipulation.

ta-dah!

in addition, note .success() gets called if server response 200, .complete() called regardless of status code


Comments

Popular posts from this blog

javascript - Slick Slider width recalculation -

jsf - PrimeFaces Datatable - What is f:facet actually doing? -

angular2 services - Angular 2 RC 4 Http post not firing -