JQuery AJAX всегда возвращает ошибку на простой пост - PullRequest
3 голосов
/ 11 января 2012

Я бьюсь головой об стену с этой проблемой.Я использую JQuery 1.6.2 для использования метода AJAX на очень упрощенном HTTP-сервере, работающем в отдельном поддомене.Если я просто отправлю простую HTML-форму, я получу правильный вывод, но, конечно, я хочу сделать это с помощью Javascript.

Поэтому я использовал метод AJAX, как показано ниже:

$('.send_sample').click(function () {

        var request = $.ajax({
            url : "http://removedurl:8080/SAMPLES",
            type : 'POST',
            dataType : 'text',
            crossDomain : true,
            cache : false,
            accepts : 'text/plain',
            data : {username : '<?php echo $_SESSION['username'] ?>', first_name : '<?php echo $_SESSION['first_name']; ?>', last_name : '<?php echo $_SESSION['last_name']; ?>', company : '<?php echo $_SESSION['company']; ?>', sequence_id : '', filename : '', sample_id : '', quantity : '', output_file : '', delivery : '', email_copy : ''},
            success : function (return_value) {
                console.log(return_value);
            },
            error : function (error_info) {
                console.log(error_info);
            },
            complete : function (complete_jqXHR, textStatus) {
                console.log(textStatus);
            }
        });

        console.log(request);

    });

Обратите внимание, что URL-адрес был удален, но все остальное такое же, включая порт 8080 (поверьте мне, сервер принимает запросы HTTP на 8080.

Поэтому, когда я открываю fiddler и запускаю эту страницу, запрос уходит ивозвращается совершенно нормально в Fiddler. Я даже вижу правильный вывод, который является просто словом TRUE. Вы можете даже увидеть весь необработанный ответ здесь:

HTTP/1.1 200 200 OK
Connection: close
Content-Length: 8
Server: Indy/9.0.18

TRUE

, как я уже говорил, этот HTTP-сервер, который использует это программное обеспечениеЭто очень просто. Но JQuery по возвращении переходит непосредственно в Error без других описаний. Я также получаю небольшое сообщение, если я отлаживаю в Chrome:

XMLHttpRequest не может загрузить http://removedUrl:8080/SAMPLES. Originhttp://192.168.2.140 не разрешен Access-Control-Allow-Origin.

Кто-нибудь знает, что может быть причиной этого.

Кроме того, я постепенно добавляюредактировал поля в методе JQuery ajax : dataType, crossDomain, cache, принимает ... просто чтобы увидеть, если это что-то меняет.

Спасибо!

1 Ответ

0 голосов
/ 11 января 2012

Вам придется использовать jsonp для выполнения межсайтовых запросов ....
Установка crossDomain: true не поможет, поскольку браузер блокирует отправку ответов из внешних доменов.
Это известное ограничение JavaScript,но, как я уже сказал, вы можете избавиться от него с помощью jsonp.Вы можете погуглить, вы найдете множество ресурсов!
Обратите внимание, что вам нужно изменить ваш сервер "http://removedurl:8080/SAMPLES", чтобы получить ответы jsonp.
Если у вас нет доступа к серверу, выпридется полагаться на прокси на стороне сервера (PHP / ASP.Net и т. д.)

...