jQuery Ajax готовность 0 статус 0 в Windows 8 (8.1) ТОЛЬКО в Chrome

У меня этот бит jQuery делает вызов ajax. У скрипта были проблемы в IE и Chrome только на Win 8.1, однако я изменил несколько вещей (в том числе пропустив закрывающий тег php, который мог вызывать проблемы), и теперь IE работает и на моем Win 8.1 на Chrome работает, но клиент все еще сообщает о проблемах.

Может кто-нибудь увидеть проблему с моим сценарием, которая может привести к сбою только на Win 8.1 на Chrome? (Кстати, Safari и Opera, вероятно, не были проверены клиентом, поэтому могут также не работать на них).

Я буквально часами читал на SO и других сайтах вопросов / ответов, а также на множестве разных связанных форумов и т. Д. Я безуспешно перепробовал множество разных предложений.

Очевидно, что первое, что люди думают, это проблема кросс-домена, которая размещается на дополнительном домене, но я вызываю скрипт по тому же URL-адресу. Должен ли я звонить с использованием URL основного домена? (Я не могу понять, что это за основной домен в данный момент, посмотрите на этот вопрос: Найти оригинальное имя основного домена на основе имени дополнительного домена)

Клиент получает оповещения из блока ошибок ajax:

readystate = 0
status = 0
responseText = ''
statusText = 'error'

Любая помощь очень ценится, я застрял на этом в течение нескольких недель.

Вот мой JQuery:

            $('#bkdl-submit').on('click', function(e) {

                e.preventDefault();
                var tempvar = $('#bkdl-email').val();

                if (IsEmail(tempvar)) {

                    $('#loading-image').show();
                    $('#bkdl-submit').hide();

                    $.ajax({
                        url: "http://addondomain.com/wp-content/themes/html/bkdl-ajax.php?nocache="+Date.now(),
                        method: "POST",
                        data: {
                            email: tempvar
                        },
                        success: function (data) {

                            $("#bkdl-email").css('background-color', '#f00');
                            $("#bkdl-email").val('');
                            $("#hidlink").attr('href', data);
                            $("#hidlink").text('Click to Download');
                            $("#hidlink").show();
                            $("#bkdl-submit").hide();
                        },
                        complete: function () {
                            $('#loading-image').hide();

                        },
                        error: function (xhr, strError, strHttpStatus) {

                            alert(JSON.stringify(xhr, null, 2));
                            alert(strHttpStatus);
                        }
                    });

                } else {

                    alert('Invalid Email');
                }

                return false;
            });

PHP-скрипт AJAX на случай, если это поможет...

<?php
define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
if(!IS_AJAX) {die('Restricted access1');}
$pos = strpos($_SERVER['HTTP_REFERER'],getenv('HTTP_HOST'));
if($pos===false) { die('Restricted access'); }

require_once 'Ctct/autoload.php';
use Ctct\ConstantContact;
use Ctct\Components\Contacts\Contact;
use Ctct\Components\Contacts\ContactList;
use Ctct\Components\Contacts\EmailAddress;
use Ctct\Exceptions\CtctException;
define("APIKEY", "xxxxxxxxxxxxxxxxxxxxxxxxxx");
define("ACCESS_TOKEN", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
$cc = new ConstantContact(APIKEY);

// check if the form was submitted

if (isset($_POST['email']) && strlen($_POST['email']) > 1) {

    $email =  strip_tags(htmlentities(trim($_POST['email']))); 
    $action = "Getting Contact By Email Address";

    try {
        // check to see if a contact with the email addess already exists in the account
        $response = $cc->getContactByEmail(ACCESS_TOKEN, $email);

        // create a new contact if one does not exist
        if (empty($response->results)) {
                $action = "Creating Contact";
                $contact = new Contact();
                $contact->addEmail($_POST['email']);
                $contact->addList('xxxxxxxxxxxxx');
                $contact->first_name = '';
                $contact->last_name = '';
                $returnContact = $cc->addContact(ACCESS_TOKEN, $contact);
        // update the existing contact if address already existed
        } else {
                $action = "Updating Contact";
                $contact = $response->results[0];
                $contact->addList('xxxxxxxxxxxx');
                $contact->first_name = '';
                $contact->last_name = '';
                $returnContact = $cc->updateContact(ACCESS_TOKEN, $contact);
        }

echo 'http://addondomain.com/wp-content/themes/html/giveaway.pdf';

// catch any exceptions thrown and email to dev
} catch (CtctException $ex) {

    $errorvar = print_r($ex->getErrors(), true);
    mail('deverrors@gmail.com', 'test', $errorvar);
    die();
}
} else {
    echo 'Invalid Email'; exit;

}
exit;

1 ответ

Решение

Это на самом деле оказалось маленьким ?> в конце файла AJAX.

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

Очевидно, что новые политики безопасности MS в win8 как-то связаны с этим. Я до сих пор не очень понимаю, как это влияет на это, но мне кто-то здесь сказал.

Так что да... урок дня...

Не закрывайте свои файлы PHP с помощью закрывающего тега PHP?> Или у вас могут быть проблемы в win8

Другие вопросы по тегам