Вопрос

<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>

Он выполняет запрос параметров на этот URL, а затем обратный вызов никогда не вызывается ни с чем.

Когда он не перекрестный домен, он работает нормально.

Разве не должен просто делать звонок с <script> Узел, а затем выполните обратный вызов, когда он загружен? Я понимаю, что я не смогу получить результат (так как он перекрестный домен), но это нормально; Я просто хочу, чтобы звонок прошел. Это ошибка, или я делаю что -то не так?

Это было полезно?

Решение 2

Варианты из http://www.w3.org/tr/cors/ Видеть http://metajack.im/2010/01/19/crossdomain-ajax-for-xmpp-http-binding-made-easy/ Для немного больше информации

Другие советы

Согласно с Мд,

Предварительные запросы

В отличие от простых запросов (обсуждаемых выше), «Предварительные» запросы сначала отправьте заголовок запроса на параметры HTTP в ресурс на другом домене, чтобы определить, безопасен ли фактический запрос для отправки. Поперечные запросы предварительно подготовлены, так как они могут иметь значение для пользовательских данных. В частности, запрос предопределен, если:

  • Он использует методы, кроме получения или публикации. Кроме того, если POST используется для отправки данных запроса с помощью типа контента, отличного от Application/x-Www-form-Urlencoded, Multipart/Form-Data или Text/Plain, например, если запрос Post отправляет полезную нагрузку XML на сервер Используя Application/XML или Text/XML, тогда запрос предварительно выполнен.
  • Он устанавливает пользовательские заголовки в запросе (например, в запросе используется заголовок, такой как X-Pingother)

Если вы пытаетесь ПОЧТА

Убедитесь, что 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"
    });
}

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

$.get("http://metaward.com/import/http://metaward.com/u/ptarjan?jsoncallback=?", function(data) {
     alert(data);
});

Получающему сценарию, чтобы использовать этот аргумент (который не должен называться «jsoncallback»), поэтому в этом случае функция никогда не будет вызвана. Но, поскольку вы заявили, что просто хотите, чтобы сценарий на Metaward.com выполнил это.

Фактически, запросы Cross-Domain Ajax (XMLHTTP) не допускаются из-за соображений безопасности (подумайте о том, чтобы получить «ограниченную» веб-страницу со стороны клиента и отправить ее обратно на сервер-это будет проблема безопасности).

Единственным обходным пути являются обратные вызовы. Это: создание нового объекта сценария и указание SRC на JavaScript конечной стороны, который является обратным вызовом со значениями JSON (myFunction ({data}), мифункция-это функция, которая делает что-то с данными (например, хранение ее в переменной).

Just change the "application/json" to "text/plain" and do not forget the 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,
    });

I had the same problem. My fix was to add headers to my PHP script which are present only when in dev environment.

This allows cross-domain requests:

header("Access-Control-Allow-Origin: *");

This tells the preflight request that it is OK for the client to send any headers it wants:

header("Access-Control-Allow-Headers: *");

This way there is no need to modify the request.

If you have sensitive data in your dev database that might potentially be leaked, then you might think twice about this.

It's looking like Firefox and Opera (tested on mac as well) don't like the cross domainness of this (but Safari is fine with it).

You might have to call a local server side code to curl the remote page.

In my case, the issue was unrelated to CORS since I was issuing a jQuery POST to the same web server. The data was JSON but I had omitted the dataType: 'json' parameter.

I did not have (nor did I add) a contentType parameter as shown in David Lopes' answer above.

I was able to fix it with the help of following headers

Access-Control-Allow-Origin
Access-Control-Allow-Headers
Access-Control-Allow-Credentials
Access-Control-Allow-Methods

If you are on Nodejs, here is the code you can copy/paste.

app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin','*');
  res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
  res.header('Access-Control-Allow-Credentials', true);
  res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH');
  next();
});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top