2013-08-19 5 views
0

Я использую следующий код для получения данных из URL-адреса.Извлечь данные JSON с удаленного URL-адреса через jQuery AJAX

$.ajax({ 
    url: 'http://183.77.251.173:90/api/function/getprice.aspx?code=1301&length=3M', 
    success: function (data) { 
     alert(data.results[0].address_components[0].long_name); 
    }, 
    error: function (jqXHR, exception) { 
     alert(jqXHR.status); 
    } 

Однако он выдает ошибку с кодом состояния 0. Я не знаю, в чем причина этого? Я также пытался установить crossDomian:true, но он по-прежнему бросает ту же ошибку.

Я также изменил URL-адрес на http://www.google.com, который также возвращает код состояния ошибки 0. Зачем? Какова причина? Каков правильный способ получить данные с удаленного URL-адреса?

+0

_ «Я попытался установить« crossDomian: true »« _ - Это было опечатка только в вопросе? – nnnnnn

+0

никогда не слышал о той же политике происхождения? http://en.wikipedia.org/wiki/Same-origin_policy –

+0

@nnnnnn, даже если бы это было, 'crossDomain' должен только установить запрос non-crossdomain как crossdomain. Его нельзя использовать наоборот. –

ответ

2

Вы не можете запросить кросс-домен, если не используете JSONP или CORS. Доступность этих данных будет зависеть от API домена, запрашиваемого вами.

Это функция безопасности современных браузеров, известных как Same Origin Policy.

+0

Как узнать доступность? – Aviator

+0

Вам необходимо проверить документацию API, которую вы используете, чтобы узнать, в каком формате они возвращают данные. –

-3

Для междоменного использования $.getJSON().

$.getJSON('http://183.77.251.173:90/api/function/getprice.aspx?code=1301&length=3M', function(data){ 
alert(data.results[0].address_components[0].long_name); 
}); 
+0

Это неверно. –

+0

Да, но что-то в этом роде. – Aydomir

+1

Нет, совсем нет. Прочтите другие ответы, чтобы узнать, почему. –

0

Посмотрите JSON с дополнением (или JSONP), так как вы используете JQuery, вы должны посмотреть здесь: http://api.jquery.com/jQuery.getJSON/

Украденное пример с этого сайта:

<script> 
(function() { 
    var flickerAPI = "http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?"; 
    $.getJSON(flickerAPI, { 
    tags: "mount rainier", 
    tagmode: "any", 
    format: "json" 
    }) 
    .done(function(data) { 
    $.each(data.items, function(i, item) { 
     $("<img/>").attr("src", item.media.m).appendTo("#images"); 
     if (i === 3) { 
     return false; 
     } 
    }); 
    }); 
})(); 
</script> 

EDIT:

Домашний пример, используя jquery.jsonp-2.4.0 для лучшего ответа на ошибку (https://github.com/jaubourg/jquery-jsonp/downloads). Но вы можете использовать простой jQuery.

На стороне клиента, вам нужно что-то вроде этого:

$.jsonp({ 
    "url": target_url+"ping.php?callback=?", 
    "success": function(data) { 
     // print out data 
    }, 
    "error": function(d,msg) { 
     // error 
    } 
}); 

ping.php файл на целевом сервере:

<?php 
    echo $_GET['callback'] . '(' . "{'response' : 'success'}" . ')'; 
?> 
+1

Обратите внимание, что сайт по указанному URL должен поддерживать JSONP для этого. Конкретный URL-адрес, указанный ОП (http://183.77.251.173:90/api/function/getprice.aspx?code=1301&length=3M), возвращает JSON, хотя у сайта может быть какой-то способ запросить JSONP. – nnnnnn

+0

@nnnnnn вы можете обновить более четкие детали. I не то, что такое JSONP и та же политика -оригина – SivaRajini

+0

Если у вас есть доступ к целевому серверу, вы можете попробовать пример, который я добавил к моему ответу. Если у вас нет доступа к серверу, вам нужно спросить, есть ли у них поддержка JSONP, а затем соответствующим образом изменить ваш код. – TheNish

-1

Как уже сказал, что вы получаете ошибки 0 происходит потому, что сайт недоступен. Проблема с перекрестным сайтом - причина. Конечно, это неправильный URL. Если URL-адрес, который вы пытаетесь найти, работает и находится в другом домене, чем ваш сайт, тогда да, у вас есть проблема с перекрестным доменом.

JSONP будет вашим единственным способом заставить его работать, но есть недостатки. Посмотрите на этот пост SO для подробного объяснения:

What is JSONP all about?

Там же ссылка в статье на http://www.json.org/JSONRequest.html. Я не пробовал это, поэтому не уверен, что он работает.

Это должно помочь вам на вашем пути.