2009-11-27 2 views
3

Когда я делаю запрос AJAX с этим кодом, он возвращает статус как 0. Что я сделал неправильно? Кроме того, этот код предназначен только для работы в Firefox по разным причинам.Статус запроса статуса AJAX 0

var ajax; 

function connectToOtherServer(server,port,userid,password){ 

ajax=new XMLHttpRequest(); 
ajax.onreadystatechange=validateConnection; 

params='userid='+encodeURIComponent(userid)+'&password='+encodeURIComponent(password); 

alert('http://'+server+':'+port+'/ok.txt'); 

ajax.open('POST','http://'+server+':'+port+'/ok.txt',true); 

ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
ajax.setRequestHeader("Content-length",params.length); 
ajax.setRequestHeader("Connection","close"); 

ajax.send(params); 

} 

function validateConnection(){ 
if(ajax.readyState===4){ 
if(ajax.status===200){ 

alert(ajax.responseText); 

}else{ 
alert(ajax.status); 
} 
} 
} 

ответ

3

При попытке подключиться к другому серверу, то same origin policy остановит вас:

Термин «происхождение» определяется с использованием доменного имени , прикладной уровень протокола, и (в большинстве браузеры) TCP порт документа HTML, в котором выполняется сценарий . Два ресурса считаются одинаковыми, если и только , если все эти значения точно равны .

+0

huh? нравится, я могу использовать только ajax для подключения к тому же URL-адресу, что и страница, на которой я включен? –

+0

Нет, тот же сервер/порт: см. Http://en.wikipedia.org/wiki/Same_origin_policy – Jerome

+0

ok, есть ли в любом случае я могу обойти это? –

1

jquery.com Вы можете подключиться только к другому серверу, если используете JSONP и обратный вызов. Другой сервер должен будет поддерживать механизм JSONP/callback. Этот метод включает создание нового тега сценария, а затем отдающий сервер возвращает код обратного вызова в этот тег скрипта. Посмотрите на исходный код jQuery (или просто используйте его), чтобы увидеть, как он обрабатывает JSONP.

Основная идея заключается в создании тега сценария с исходным кодом в качестве удаленного URL-адреса. Удаленный метод возвращает «скрипт», содержащий вызов функции, используя обратный вызов и результирующие данные JSON.

0

Я недавно столкнулся с этой проблемой. Я использую AJAX для отправки результатов формы, чтобы элементы страницы могли обновляться автоматически. Мои доменные звонки были правильными. SELECT заявления в базе данных будут работать, но INSERT, UPDATE и DELETE утверждений не будет.

Оповещения, показывающие прогресс через javascript, показали, что вызов работает правильно, но он никогда не попадет в часть php процесса. Простой ответ заключался в том, что элемент формы onsubmit должен был включать return false;. Добавив это, все прошло гладко.

<form name="form" action="" method="post" onsubmit="ProcessRequest(this);return false;"> 

Надеюсь, что это поможет.

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