Ответ 1
ОПЦИИ от http://www.w3.org/TR/cors/ См. http://metajack.im/2010/01/19/crossdomain-ajax-for-xmpp-http-binding-made-easy/ немного больше информации
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js" type="text/javascript"></script>
<script>
$.get("http://example.com/", function(data) {
alert(data);
});
</script>
он выполняет запрос OPTIONS к этому URL-адресу, а затем обратный вызов никогда не вызывается ни с чем.
Если это не перекрестный домен, он отлично работает.
Не следует ли jQuery просто сделать вызов с помощью <script>
node, а затем выполнить обратный вызов при его загрузке? Я понимаю, что я не смогу получить результат (поскольку это кросс-домен), но это ОК; Я просто хочу, чтобы звонок прошел. Является ли это ошибкой, или я делаю что-то неправильно?
ОПЦИИ от http://www.w3.org/TR/cors/ См. http://metajack.im/2010/01/19/crossdomain-ajax-for-xmpp-http-binding-made-easy/ немного больше информации
Согласно MDN,
Предварительно запрограммированные запросы
В отличие от простых запросов (см. выше), сначала запрашиваются "предполненные" запросы отправьте заголовок запроса HTTP OPTIONS на ресурс на другом домена, чтобы определить, безопасен ли фактический запрос для Отправить. Запросы межсайтовых запросов предваряются таким образом, поскольку они могут имеют последствия для пользовательских данных. В частности, запрос предваряется, если:
- Он использует методы, отличные от GET или POST. Кроме того, если POST используется для отправки запрашивать данные с Content-Type, кроме application/x-www-form-urlencoded, multipart/form-data или text/plain, например если запрос POST отправляет полезную нагрузку XML на сервер, используя application/xml или text/xml, тогда запрос предваряется.
- Он устанавливает пользовательские заголовки в запросе (например, запрос использует заголовок, например X-PINGOTHER)
Я не верю, что jQuery, естественно, сделает запрос JSONP, когда будет указан такой URL. Однако он будет выполнять запрос JSONP, когда вы скажете ему, какой аргумент использовать для обратного вызова:
$.get("http://metaward.com/import/http://metaward.com/u/ptarjan?jsoncallback=?", function(data) {
alert(data);
});
Это полностью зависит от принимающего script, чтобы использовать этот аргумент (который не нужно называть "jsoncallback" ), поэтому в этом случае функция никогда не будет вызываться. Но, поскольку вы заявили, что хотите просто выполнить script на metaward.com, это сделает его.
Просто измените "application/json" на "text/plain" и не забудьте JSON.stringify(request):
var request = {Company: sapws.dbName, UserName: username, Password: userpass};
console.log(request);
$.ajax({
type: "POST",
url: this.wsUrl + "/Login",
contentType: "text/plain",
data: JSON.stringify(request),
crossDomain: true,
});
Он выглядит как Firefox и Opera (также проверенный на Mac) не нравится перекрестная доменность этого (но Safari в порядке с ним).
Возможно, вам придется вызвать локальный код на стороне сервера для завивки удаленной страницы.
На самом деле, запросы из двух доменов AJAX (XMLHttp) не допускаются из-за соображений безопасности (подумайте о получении "ограниченной" веб-страницы с клиентской стороны и отправке ее на сервер - это будет проблемой безопасности).
Единственным обходным решением являются обратные вызовы. Это: создание нового объекта script и указание src на конец JavaScript, который является обратным вызовом с значениями JSON (myFunction ({data)), myFunction - это функция, которая что-то делает с данными (например, сохраняя его в переменной).
Если вы пытаетесь выполнить POST
Обязательно JSON.stringify
данные формы и отправьте как text/plain
.
<form id="my-form" onSubmit="return postMyFormData();">
<input type="text" name="name" placeholder="Your Name" required>
<input type="email" name="email" placeholder="Your Email" required>
<input type="submit" value="Submit My Form">
</form>
function postMyFormData() {
var formData = $('#my-form').serializeArray();
formData = formData.reduce(function(obj, item) {
obj[item.name] = item.value;
return obj;
}, {});
formData = JSON.stringify(formData);
$.ajax({
type: "POST",
url: "https://website.com/path",
data: formData,
success: function() { ... },
dataType: "text",
contentType : "text/plain"
});
}