2012-11-23 3 views
6

JQuery:JQuery AJAX статус "200 OK", но нет ответа данных

$.ajax({ 
url : url, 
type : 'GET', 
dataType: 'json', 
data: { 
    'FN' : 'GetPages', 
    'PIN' : '7659' 
}, 
xhrFields: { 
    withCredentials: true 
}, 
crossDomain: true, 
success: function(data) { 
    alert('succsess'); 
    console.log('data', data); 
}, 
error: function (xhr, ajaxOptions, thrownError) { 
    alert('error'); 
    console.log(xhr.status); 
    console.log(thrownError); 
} 
}); 

Firebug Firefox Сеть

Firebug Error http://s14.directupload.net/images/121123/8ar5vljg.png

Что происходит

Аякса "error:" событие получает t riggered и мой console.log выходы:

xhr.status -> 0

thrownError -> (empty String)

Это нормально? Когда я набираю URL-адрес в браузере, я получаю загрузку файла с содержимым JSON в нем, это не должно быть проблемой?

+0

По URL-адресу браузера отвечает: [{"pg": 0, "descr": "PC1"}, {"pg": 1, "descr": "PC2"}, {" пг ": 2," DESCR ":" РС3 "}, {" PG ": 3," DESCR ":" HG1 "}, {" пг ": 4," DESCR ":" HG2 "}, {" пг» : 5, "DESCR": "HG3"}, { "пг": 6, "DESCR": "HG4"}, { "PG": 7, "Descr": "DW1"}, { "PG": 8 , "descr": "DW2"}, {"pg": 9, "descr": "CMN"}] – user1841515

+0

Также я понимаю, что ** jsonp ** не будет работать. Мне не разрешено ничего менять сервер и его ответ останутся в формате json, а не в формате jsonp – user1841515

+0

jsonp не повлияет на сервер. Но это может помочь обойти проблемы CORS. Это может быть ваш единственный вариант без изменения сервера – JonWells

ответ

10

Благодаря @CrimsonChin я знаю его же проблема Origin Policy

In computing, the same origin policy is an important security concept for a number of browser-side programming languages, such as JavaScript. The policy permits scripts running on pages originating from the same site to access each other's methods and properties with no specific restrictions, but prevents access to most methods and properties across pages on different sites.[1]

(от http://en.wikipedia.org/wiki/Same_origin_policy)

Предоставление клиентам JavaScript базовый доступ к ресурсам просто требует добавления заголовка ответа HTTP один, а именно :

Access-Control-Allow-Origin: * 
Access-Control-Allow-Origin: http://foo.example.com 

(от http://enable-cors.org/)

Ofc, превращая ответ JSON в ответ JSONP, также будет работать. Thx @djakapm

2

Я наклоняю разобрался с изображения, но если вы пытаетесь отправить запрос AJAX на другой домен, вам нужно использовать JSONP, простой запрос AJAX не будет достаточно

Попробуйте изменить dataType: 'json' к dataType: 'jsonp'

и добавить callback=? к вашему URL

+0

Итак, я попробовал и получил следующую ошибку: \t Ошибка синтаксиса descr ":" DW1 "}, {" pg ": 8," descr ":" DW2 "}, {" pg ": 9, «descr»: «CMN»}] – user1841515

+0

И ошибка: jQuery172046435253250156217_1353659110552 не был вызван – user1841515

+0

У вас есть контроль над ответом сервера? в php Я обычно даю ответ вроде этого: $ _GET ['callback']. '()'. он будет имитировать вызов функции javascript – djakapm

3

Попробуйте один

$.ajax({ type : "GET", 
      url : URL, 
      data: { 
      'FN' : 'GetPages', 
      'PIN' : '7659' 
      }, 
      xhrFields: { 
      withCredentials: true 
      }, 
      crossDomain: true, 
      dataType : "jsonp", 
      jsonp : "jsoncallback", 
      jsonpCallback : "SMS", 
      cache : true, 
       success : function(service_data) { 


         }, 
       error : function(msg) { 
       alert(JSON.stringify(msg)); 
       } 
      }); 
+0

Я запустил этот код и получил следующее поле для предупреждения: { "readyState": 4, "статус": 200, "его статуса": "успех"} И поджигатель утешать ошибку: SyntaxError: недопустимый символ в ** ** ответ JSON "DESCR" : «CMN»}] <- и стрелка, указывающая на этот вопросительный знак, который не должен быть там !? – user1841515

+0

@ user1841515 попробуйте запустить service_data через json lint (http://jsonlint.com/), чтобы убедиться, что json хорошо отформатирован – JonWells

+0

@CrimsonChin Я скопировал json и запустил проверку -> Valid JSON – user1841515

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