2016-08-30 2 views
2

Я пытаюсь отобразить json, который я получаю и разбираю в функции успеха ajax.parse json using ajax success function

То, что я до сих пор:

Ajax:

data = "Title=" + $("#Title").val() + "&geography=" + $("#geography").val(); 
alert(data); 


url= "/portal/getResults.php"; 

$.ajax({ 
     url: url, 

     type: "POST", 
     //pass the data 
     data: data, 
     dataType: 'json', 

     cache: false, 
     //success 
     success: function(data) { 

       alert(data); 

     } 
    }); 

getResults.php (выход JSON):

{ 

"results": [ 
{ 
    "DocId": 2204, 
    "Title": "Lorem ipsum dolor sit amet, consectetur", 
    "Locations": [ 
     { 
      "State": "New York", 
      "City": "" 
     }, 
     { 
      "State": "New York", 
      "City": "New York City" 
     } 
    ], 
    "Topics": [ 
     3, 
     7, 
     11 
    ], 
    "PublicationYear": "2011", 
    "Organization": "New Yorks Times", 
    "WebLocation": "www.google.com", 
    "Description": "Lorem Ipsum" 
} 
], 
"TotalMatches": 1 

} 

Я ожидаю, что результат в данных, чтобы быть из JSON getResults.php, но вместо этого я получаю [object Object].

Я также попытался код ниже, но не получить никакого ответа:

success: function(data) { 
       var json1 = JSON.parse(data); 
       alert(json1); 
     } 
+1

попробуйте 'JSON.stringify (data)' – depperm

+2

вы получите объект. при отображении этого с помощью 'alert()' он преобразуется в строку, которая по умолчанию является '[object Object]'. Попробуйте 'console.log()' вместо этого, чтобы увидеть фактический объект. – Sirko

+2

jQuery уже десериализует данные для вас, вам не нужно использовать 'JSON.parse'. Причина, по которой вы видите объект [object Object] ', состоит в том, что вы использовали' alert() 'для его просмотра - это принудительно приводит все типы в строку. Вместо этого используйте 'console.log' –

ответ

1

, так как вы говорите JQuery, что вы хотите dataType:'json', функция Аякса анализирует ответ JSON в объект для вас. объект результата, который вы видите, должен быть объектом с данными, соответствующими ответу JSON с вашего сервера. если вам нужна строковая версия, попробуйте JSON.stringify(), иначе вы можете просто использовать объект как есть: data['results'][0]['DocId'] и т. д.

удачи!

0

Вот пример для вашего запроса: http://jsfiddle.net/5y5ea98n/

var echo = function(dataPass) { 
    $.ajax({ 
     type: "POST", 
     url: "/echo/json/", 
     data: dataPass, 
     cache: false, 
     success: function(json) { 
      alert(JSON.stringify(json)); 
     } 
    }); 
}; 

$('.list').live('click', function() { 
    $.get("http://www.json-generator.com/api/json/get/bQxORzxQGG?indent=2", function(data) { 
     var json = { 
      json: JSON.stringify(data), 
      delay: 1 
     }; 
     echo(json); 
    }); 
}); 
0

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

function ajaxToParseJson(){ 
AUI().use('aui-io-request', function(A){ 
    A.io.request('${jsonAjaxURL}', { 
      dataType:'json', 
      method: 'post', 
      data: { 
       execute: 'JsonLogic', 
       numberVal:'Pass Json String Here if needed from Screen' 
      }, 
      on: { 
        success: function() 
        { 
         var empName = this.get('responseData').name; 
         var id = this.get('responseData').id; 
         console.log("Name: "+empName); 
         console.log("Id: "+id); 
        /** Since return type of this function is bydefault Json it will return Json still if you want to check string below is the way**/ 
        var data = JSON.stringify(this.get('responseData')); 
        alert(data); 
        } 
       } 
     }); 

}); 

}

У меня есть класс Employee с двумя полями ID, имя.