2013-08-07 6 views
0

Нормально ли, что приведенный ниже код возвращает «ошибку», когда html-файл не загружается на мой сервер, и если да: почему? Он отлично работает, когда я загрузить его на моем сервере, хотя ...Ajax работает только при загрузке html-страницы на мой сервер

<head> 
<script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
<script> 
     function validate() { 

        $.ajax({ 
         type:'POST', 
         url:'http://www.mywebsite.com/formvalidate.php', 
         data:{ 

         }, 
         dataType:'json', 
         success:function (data) { 
          alert('success'); 


         }, 
         error:function (XMLHttpRequest, textStatus, errorThrown) { 
          alert('error'); 
         } 
        }); 

       } 
</script> 
</head> 
<body> 
<input type=button onclick="validate();" value="Click me"/> 
</body> 
+0

Просьба уточнить вашу конкретную проблему или добавить дополнительные сведения, чтобы точно указать, что вам нужно. Как это написано в настоящее время, трудно точно сказать, что вы просите. –

+0

такой же сайт происхождение политики –

+0

Возможно, причина безопасности, такая как XSS. –

ответ

1

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

Но когда вы загрузили его на том же сервере, то не было никакого креста вопрос домена, поэтому успех сообщение

Для того чтобы крест Аякса домена позвонить вам следует использовать JSONP

$.ajax({ 
    url:"testserver.php", 
    dataType: 'jsonp', // Notice! JSONP <-- P (lowercase) 
    success:function(json){ 
     // do stuff with json (in this case an array) 
     alert("Success"); 
    }, 
    error:function(){ 
     alert("Error"); 
    }, 
}); 

ЛИТЕРАТУРЫ : - jQuery AJAX cross domain

+0

Это делает смысл ... спасибо! Однако я использовал тот же самый сценарий, чтобы делать аякс-вызовы в приложении Android с помощью phonegap и jQuery Mobile. В этом случае html-страница не находится в том же домене, но она отлично работает ... это перекрестный домен ajax, разрешенный в jQuery Mobile, чем? – binoculars

+1

@binoculars Вы можете совершать междоменные ajax-вызовы без каких-либо проблем, не требуется JSONP. Тем не менее, ваш сервер должен соответствующим образом обрабатывать эти вызовы, добавляя необходимые заголовки в ответ (-ы) и, возможно, также обрабатывая запросы OPTIONS (предполетные). Вы можете узнать больше о [CORS on MDN] (https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS). –

+0

«тогда разрешен перекрестный домен ajax в jQuery Mobile?», Нет, это не оговорено jQuery. он «упрощен» jQuery. тот, который разрешает или ограничивает это, является (мобильным) браузером. в этом случае он работает, потому что «сервер поставщика json» реализует «свободный способ совместного использования междоменного», то есть: обертывает аннулированный json вызовом функции javascript. jquery использует этот mecanism, когда вы устанавливаете 'dataType: 'jsonp' –

0

Javascript не пересекаться domnain Ланга», так что вы должны быть в том же домене, или разрешить его в самой загрузки страницы с помощью JSONP.

2

Это происходит, потому что «same site origin policy» вы можете избежать, если вы используете jsonp тип на jquery ajax call.
В вашем случае вы можете, так как вы являетесь сайтом-разработчиком и клиентом.

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