2016-07-24 3 views
0

Как я могу проверить Appcelerator, если ответ JSON?Как проверить, является ли ответ от сервера объектом JSON в Appcelerator?

Я пробовал обычный способ в js.

Ti.API.info(response.constructor.name); // returns "String" 
if (response instanceof JSONObject) //JSON object undefined 

Другие способы

 var response = this.responseText; 

     if (response.constructor === {}.constructor){ 
      Ti.API.info('is object'); 
      response = JSON.parse(response); 
     } 
     else{ 
      Ti.API.info('not object'); 
      Ti.API.info(response.constructor); // returns some Krollback <KrollCallback: 0x7fbdc8c0abe0> 
     } 

Я использую подстроку, но это только кажется ошибочным.

if (response.substring(0, 1) === "{") 

ответ

0

Вот что я делаю, чтобы проверить ответ JSON, посланный с API:

// convert http response to json 
var CVT_ORDER_SEARCH_RESPONSE = JSON.parse(HttpResponse.responseText); 

// verify json response parse returned valid object 
if (!CVT_ORDER_SEARCH_RESPONSE){ 
    throw 'Invalid JSON response returned by server.'; 
} 

Смотрите также: JSON.parse Function (JavaScript)

+0

Я обычно разбираю ответ после того, как я знаю, что это JSON, если я пытаюсь разобрать объект, отличный от JSON, я получаю сообщение об ошибке. –

+2

@Von, я обычно обрабатываю такие случаи внутри блока try-catch-finally, потому что я не буду уверен, что когда сервер отправит мне неправильный ответ JSON, так что лучше обработать их в try-catch вместо if-else, потому что if- else нужны фактические значения и/или тип данных. –

+0

Пойдите для Try Catch. Это единственный способ –

1

Следуя советам Prashant и Карлос, я попробовать/поймайте внутри onload, спасибо вам, ребята.

 var response = this.responseText; 
     try { 
      console.log("success"); 
      var response = JSON.parse(response); 
      if (callback) 
       callback(response); 
     } 
     catch(e){ 
      console.log("error parsing"); 
      if (callback) 
       callback("error"); 
     }