2010-06-03 1 views
0

У меня есть страница, которая использует следующий отправить запрос AJAX:как получить ответ от запроса jQuery.get

function oc() 
{ 
    jQuery.get(
    "http://somewhere.com:5001/ajax/options/", 
    jQuery('#selectform').serialize(), 
    function(data,statusm,xml){ 
     // I got nothing!!! 
     return; 
    } 
); 
} 

Если я инструкцию запрос в адресной строке, все работает. И когда я делаю запрос от JS, я могу видеть через протоколирование, что серверная сторона работает правильно, но в обратном вызове я не могу получить содержимое ответа.

Что я не так?

ответ

3

Что вы, вероятно, видеть будет same-origin policy ног. Это функция безопасности браузера, чтобы предотвратить атаки межсайтовых скриптов и доступ даже одного домена/хост на другой порт рассчитывают как на «другой домен» в отношении политики. example table on Wikipedia делает отличную работу по показу того, что/не разрешено.

Вы можете дополнительно протестировать это с помощью переключателя командной строки --disable-web-security в Chrome, тогда ваш скрипт должен работать ... это не решение, просто помогает подтвердить проблему.

Короче говоря, вам необходимо сделать запросы к одному домену или хосту и порту, иначе он будет заблокирован. Исключением из этого правила является использование JSONP, которое используется в основном для этой цели. Вы можете найти приличные примеры here и here.

+0

Ник, он сказал, что серверная сторона работает правильно. Это не произойдет, если это проблема происхождения. –

+1

@Matthew - Вы увидите * именно это поведение в той же проблеме происхождения, не там, чтобы защитить сервер, он там, чтобы защитить клиента, т. Е. Блокировать ответ. –

+0

Вы можете сделать слепой запрос другими способами (например, тегом изображения), но не с XHR. Попробуйте http://jsfiddle.net/Degf7/ с открытым Wireshark. Вы получите сообщение об ошибке, и он не отправит запрос. Обратите внимание, что в некоторых случаях ошибка маскируется, поэтому функция успеха вызывается с пустыми данными. Но запрос никогда не отправляется. –

1

Попробуйте использовать функцию ошибки с помощью $ .ajax.

$.ajax({ 
    url: "http://somewhere.com:5001/ajax/options/", 
    data: jQuery('#selectform').serialize(), 
    success: function(data,statusm,xml){ 
    // I got nothing!!! 
    return; 
    }, 
    error: function(XMLHttpRequest, textStatus, errorThrown) { 
    // do something 
    } 
});