最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Can not get json response using $.getJSON - Stack Overflow

programmeradmin2浏览0评论

I am currently developing a Ruby on rails 3 application.

My server controller function render a json object as response:

class DaysController < BaseController
   ...
   def the_days
     ...
     render :json => days
   end
end

In my javascript,I use the following code to get json response from server( that's from the_day function in controller)

$.getJSON(  
             url,  
             {emp_id: emp_id},
             function(data) {
                     var result = data.response;
                     alert(result) 
                     alert(data)
                 },
                 "json"
        );

I use firefox browswer and checked with Firebug, in Firebug Net->XHR, I see the Get request is successful, and the response "days" is there. That's both request and response are successful.

But I did not see the two alert window defined in the above $.getJSON function, why? Why I can not get the response "days" in $.getJSON function??

-----------------Edited------------------

I edited my code to this one:

$.ajax({
            url: myURL,

            type: 'GET',

            data: {
                emp_id: emp_id
            },

            dataType: "json",

            success: function(data) {
                alert("hi");
                alert(data)
            }
        });

When I run this code, the browser is stuck at success: function(data)

I am currently developing a Ruby on rails 3 application.

My server controller function render a json object as response:

class DaysController < BaseController
   ...
   def the_days
     ...
     render :json => days
   end
end

In my javascript,I use the following code to get json response from server( that's from the_day function in controller)

$.getJSON(  
             url,  
             {emp_id: emp_id},
             function(data) {
                     var result = data.response;
                     alert(result) 
                     alert(data)
                 },
                 "json"
        );

I use firefox browswer and checked with Firebug, in Firebug Net->XHR, I see the Get request is successful, and the response "days" is there. That's both request and response are successful.

But I did not see the two alert window defined in the above $.getJSON function, why? Why I can not get the response "days" in $.getJSON function??

-----------------Edited------------------

I edited my code to this one:

$.ajax({
            url: myURL,

            type: 'GET',

            data: {
                emp_id: emp_id
            },

            dataType: "json",

            success: function(data) {
                alert("hi");
                alert(data)
            }
        });

When I run this code, the browser is stuck at success: function(data)

Share Improve this question edited Feb 13, 2011 at 17:01 Mellon asked Feb 13, 2011 at 15:11 MellonMellon 39k79 gold badges193 silver badges265 bronze badges 0
Add a ment  | 

5 Answers 5

Reset to default 2

If data is ing back null, but the response was otherwise successful, I'd say that you're sending the request in a manner that violates the Same Origin Policy.

The request needs to be sent to the same host/port/protocol that served the original page.

If this is only an issue in your development environment, you can test in Chrome by launching it from a Terminal application with --disable-web-security.


EDIT: Try changing the parameter name from data to something else, like dat or whatever.

Then try an alert:

alert( dat );

I've heard of some browsers having trouble with the data parameter when you utilize the data property of an AJAX call.

I'm guessing that the problem is that data does not have a response property. Try alerting just the data variable. It should be the days object itself.

I wish I could just leave a ment but I guess I don't have access to that yet.

Anyway, I'd start with something even more basic. Add some text alerts just to make sure you're actually making it to where you think you are. ie...

$.getJSON(  
             url,  
             {emp_id: emp_id},
             function(data) {
                     alert('hi')  // add this
                     var result = data.response;
                     alert('bye') // add maybe even this
                     alert(result) 
                     alert(data)
                 },
                 "json"
        );

Sometimes when I'm debugging I find that even my most basic assumptions are wrong.

Edit: here's some sample code from working code I recently implemented

$.ajax({
        url: 'users/check_username',
        type: 'GET',
        data: {
          username: username
        },
        dataType: "json",
        success: function(user_exists) {
          alert(user_exists)      // CHANGE THIS PART
        }
      });

It sounds like you are not sending the correct header in your ruby application. Firebug should report the response Content Type as application/json because that is what jquery is expecting it to be.

You could try changing the datatype in your ajax call to html to see if your alerts work with that, but that doesn't really help with the json parsing.

ALL, finally, I figured out the root cause. The reason is simply because of "Invalid json data" returned in server. That's in rails controller function 'def the_days':

render :json => days

should be modified to

render :json => days.to_json

Then, everything works smoothly:) Thank you all anyhow!

发布评论

评论列表(0)

  1. 暂无评论