2014-10-31 88 views
1

我得到了使用JSONP的ajax请求的结果,没有任何问题。这里是我的代码Jquery/JavaScript - 将Ajax jSONP响应存储到变量中

function TestJSONP() 
    { 
    $.ajax({ 
     url: "https://www.sample.com/api/users.json?account_api_key=0000&unique_install_id=0000&[email protected]&locale_id=en-US&operating_system_version=6.1.7601.65536&operating_system_architecture=64&outlook_version=2013&version=0.0.5.0", 

     // the name of the callback parameter, as specified by the YQL service 
     jsonp: "callback", 

     // tell jQuery we're expecting JSONP 
     dataType: "jsonp", 

     // tell YQL what we want and that we want JSON 
     data: { 
      q: "select title,abstract,url from search.news where query=\"cat\"", 
      format: "json" 
     }, 

     // work with the response 
     success: function (response) { 
      console.log(response); // server response 
     } 
    }); 
} 

我需要将响应数据设置为变量,我可以访问该请求之外访问。请指教我。 (我读了一些类似的问题,但我无法将他们的解决方案应用到我的程序中,因为我认为我的响应数据结构有点不同)请参阅下面的代码块以查看console.log(response)的结果;

{ 
account: 
{ 
id: "sadasdd4234", 
name: "Sample Development", 
support_email_address: "[email protected]", 
report_threat_button_text: "text1", 
successful_report_text: "text2", 
false_report_text: "text3", 
}, 
current_plugin_version: "0.0.1", 
id: "trt45rety", 
status: "ok", 
type: "api_response", 
user: 
{ 
id: "erwrretV0", 
language: "en", 
first_name: "Robert", 
last_name: "Croos", 
email_address: "[email protected]" 
} 
} 

在此先感谢。贵霜Randima

+0

你想要什么? – Amy 2014-10-31 06:07:26

+0

回应它自己一个变量。 – Amy 2014-10-31 06:08:22

+0

@Amy,谢谢你的提问。我找到了解决方案。很简单。我会在几分钟内发布我的答案。仍在写这个。 – 2014-10-31 06:10:53

回答

2

试试这个例子:

只是声明了一个全局变量的函数外部和响应变量分配给Ajax响应后全局变量。

var jsonData; 
    function TestJSONP() 
    { 
    $.ajax({ 
     url: "https://www.sample.com/api/users.json?account_api_key=0000&unique_install_id=0000&[email protected]&locale_id=en-US&operating_system_version=6.1.7601.65536&operating_system_architecture=64&outlook_version=2013&version=0.0.5.0", 

     // the name of the callback parameter, as specified by the YQL service 
     jsonp: "callback", 

     // tell jQuery we're expecting JSONP 
     dataType: "jsonp", 

     // tell YQL what we want and that we want JSON 
     data: { 
      q: "select title,abstract,url from search.news where query=\"cat\"", 
      format: "json" 
     }, 

     // work with the response 
     success: function (response) { 
      console.log(response); // server response 
      jsonData = response; // you can use jsonData variable in outside of the function 
     } 
    }); 
} 
0

艾米的回答是正确的。做得好!我会重写它的更多细节。这对初学者会有帮助。

var jasonData; 
    function TestJSONP() 
{ 
$.ajax({ 
    url: "https://www.sample.com/api/users.json?account_api_key=0000&unique_install_id=0000&[email protected]&locale_id=en-US&operating_system_version=6.1.7601.65536&operating_system_architecture=64&outlook_version=2013&version=0.0.5.0", 

    // the name of the callback parameter, as specified by the YQL service 
    jsonp: "callback", 

    // tell jQuery we're expecting JSONP 
    dataType: "jsonp", 

    // tell YQL what we want and that we want JSON 
    data: { 
     q: "select title,abstract,url from search.news where query=\"cat\"", 
     format: "json" 
    }, 

    // work with the response 
    success: function (response) { 
     console.log(response); // server response 

     //Save Account Data 
     account_id = response.account.id; 
     name = response.account.name; 
     support_email_address = response.account.support_email_address; 
     report_threat_button_text = response.account.report_threat_button_text; 
     successful_report_text = response.account.successful_report_text; 
     false_report_text = response.account.false_report_text; 

     //Main Object Data 
     current_plugin_version = response.current_plugin_version; 
     id = response.id; 
     status = response.status; 
     type = response.type;   

     //Save User Data 
     user_id = response.user.id; 
     language = response.user.language; 
     first_name = response.user.first_name; 
     last_name = response.user.last_name; 
     email_address = response.user.email_address; 
    } 
}); 
} 
1

我试着验证JSON响应,它似乎是无效的,可能这就是你无法将其设置为变量的原因。您可以在http://jsonlint.com/上验证json响应。

一旦你得到纠正的json响应,你可以定义一个超出函数范围的变量,并且你可以给变量指定响应。确保变量在函数之前定义。

var responseObject ; 
function TestJSONP(){ 
..... 
..... 

// work with the response 
    success: function (response) { 
     responseObject = JSON.parse(response); 
} 

希望这有助于。

+0

感谢您提供验证JSON的链接。但这是关于“JSONP”(带填充的JSON)。我可以使用它来验证JSONP(但我无法自己尝试它) – 2014-10-31 06:30:56

+0

是的,你也可以验证JSONP。我所知道的唯一区别是JSONP响应来自不同的域,但是两者的格式相同。如果格式有任何不同,请告诉我,或者如果您知道 – anup 2014-10-31 06:59:09

+0

任何我可以参考的URL。谢谢 – anup 2014-10-31 07:00:27