仅从ajax查询中获取JSON

时间:2013-11-05 07:33:18

标签: javascript jquery ruby-on-rails ajax json

我正在使用这个脚本:

var test = $.ajax({ url : ("/areas/list"), type : 'GET', dataType : 'json', success : function(e) {

    } });

我在var text

中得到了这个结果
    Object {readyState: 1, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function…}
abort: function ( statusText ) {
always: function () {
complete: function () {
done: function () {
error: function () {
fail: function () {
getAllResponseHeaders: function () {
getResponseHeader: function ( key ) {
overrideMimeType: function ( type ) {
pipe: function ( /* fnDone, fnFail, fnProgress */ ) {
progress: function () {
promise: function ( obj ) {
readyState: 4
responseJSON: Object
responseText: "{↵ "kind": "fusiontables#sqlresponse",↵ "columns": [↵  "INSEE_COM",↵  "KML",↵  "NOM_COMM"↵ ]}"
setRequestHeader: function ( name, value ) {
state: function () {
status: 200
statusCode: function ( map ) {
statusText: "OK"
success: function () {
then: function ( /* fnDone, fnFail, fnProgress */ ) {
__proto__: Object

问题是,在这个对象中,我想只获得响应JSON的对象。我试过test.responseJSON,但它不起作用......

我怎样才能获得JSON?

感谢您的帮助!

F。

4 个答案:

答案 0 :(得分:4)

您没有对成功回调中的返回数据执行任何操作。

这应该有效:

var test;

$.ajax({ 
  url: "/areas/list", 
  type: 'GET', 
  dataType: 'json', 
  success: function(response) {
    // Do what ever with the response here
    console.log(response);

    // or save it for later. 
    test = response;
  } 
});

如果您决定将响应保存在变量中,则无法立即访问该变量。 ajax请求不完整。最好在成功回调中处理JSON对象。

答案 1 :(得分:3)

test变量值将是$.ajax()函数调用返回的值,而不是结果。 $.ajax不会立即返回调用中的值,它是异步的,这就是使用回调(success: function(e) {})的原因。当ajax调用成功获取要求获取的任何内容时,将调用success回调。

检查成功回调中的e是什么!

$.ajax({url: ("/areas/list"), type: 'GET', dataType: 'json', success: function(e) {
  console.log(e); // e == result from the ajax call.
}});

答案 2 :(得分:1)

你试图同步获取值,这不是一个好习惯。您应该尝试以下方式:

var test;
$.ajax({  
    url:"/areas/list",  
    type:"GET",  
    dataType:"JSONP",  
    success:function(testdata){  
    console.log(testdata);  
    test=testdata;  
    }  
});

答案 3 :(得分:1)

<强> 1。您是否返回JSON数据?

在您的AJAX中,您正在向/areas/list处的链接发送请求 - 您如何在Rails控制器中处理该请求?

要返回JSON数据,它应该是这样的:

#app/controllers/areas_controller.rb
def list
    respond_to do |format|
        format.json { return :json => "hello".to_json }
    end
end

发布控制器代码对我们所有人都有很大的帮助


<强> 2。您是否正确处理JSON数据?

JSON数据与“普通”javascript数据不同。使用JSON parse functions

从服务器返回时必须对其进行解析
$.ajax({ 
     url : ("/areas/list"),
     type : 'GET',
     dataType : 'json',
     success : function(data) {
        var json_data = JSON.parse(data);
        //do what you need here with the new array
    }
});