2012-05-11 2 views
0

Это действительно простой вопрос, поэтому, пожалуйста, не делайте удовольствия ... Мне предоставлен URL-адрес веб-службы, который предоставит мне объект JSON. Я хотел бы использовать getJSON метод JQuery, например ...Использование jQuery Ajax для возврата объекта JSON

var myObj = $.getJSON("https://www.myurl/"); 

Однако это ISN # т работать, как когда я использую console.log (myObj.toSource()) Я просто кажется, чтобы получить много аф JavaScript написано на консоль, а не на мой объект. Я знаю, что могу добавить функцию обратного вызова с помощью этого метода, я должен сделать что-то вроде этого:

var thisJsonObj; 

$.getJSON("https://www.myurl/", function(result){ 
    thisJsonObj = result; 

}); 

console.log(thisJsonObj.toSource()); 

Это не работает, либо ... где я буду неправильно? URL работает и исправляется.

+1

Если это междоменный вызов, попробуйте jsonp вместо json в jquery. не забудьте добавить «обратный вызов» в свой серверный код. JQuery никогда не будет выполнять междоменный вызов только с помощью json, но вы можете написать свою собственную функцию Ajax, чтобы избежать этого ограничения. – Tom

+0

ваш вызов console.log выполняется сразу после запуска HTTP-запроса, однако ваш обратный вызов не будет вызван до тех пор, пока HTTP-запрос не будет завершен, поэтому thisJsonObj не устанавливается по времени вызова console.log. Если вы переместите вызов console.log в обратный вызов, вы увидите правильный результат – jjwchoy

ответ

2

Ajax работает асинхронно, так что вы должны работать с объектом JSON внутри функции обратного вызова:

var thisJsonObj; 
$.getJSON("https://www.myurl/", function(result) { 
    thisJsonObj = result; 
    console.log(thisJsonObj); 
}); 

Кроме того, если вы используете внешний веб-сервиса, вы должны consider, что запрос должен рассматриваться как JSONP. Поэтому проверьте, имеет ли ваш URL-адрес нечто вроде «callback =?».

0

Хотя URL-адрес может быть URL-адресом веб-службы, вы можете вызвать функцию внутри веб-службы? Например, если у вас питона микрокаркас (например, Flask в моем примере), и я хотел, чтобы получить список элементов, отображаемых в поле со списком, мой питон может выглядеть немного как:

@app.route('/_gest_list.json') 
def get_list(): 
    #return list of jsonified items 

Какие вызывается в вашем JQuery как

$.getJSON("/get_list.json", {}, function(data) { 
    //Do something 
}); 

думать об этом, как будто я звоню функцию get_list(), которая сопоставляется с URL в WebService/сервер и имеет псевдоним /get_list.json

Кроме того, если вы работа с ASP.Net для Вы должны написать что-то вроде (имя переменной) .d. Все данные JSON в ASP.Net заключены в d!

Смежные вопросы