JQuery AJAX beforeSend функция терпит неудачу IE 8 - PullRequest
1 голос
/ 31 декабря 2011

Я новичок в jquery, и я застрял. Эта страница прекрасно работает в Firefox и Chrome, но в функции beforeSend в IE8 я всегда получаю «Все поля обязательны», независимо от того, что я делаю. Может кто-нибудь указать мне, что делает IE, чтобы всегда вызывать сбой этой функции? Спасибо.

<html>
<head>
<title>Contact form</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="../css/modal_company.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="../js/jquery-1.7.1.js"></script>
<script type="text/javascript">
$(document).ready(function() { 
function getQueryParams(qs) {
    qs = qs.split("+").join(" ");
    var params = {},
        tokens,
        re = /[?&]?([^=]+)=([^&]*)/g;
    while (tokens = re.exec(qs)) {
        params[decodeURIComponent(tokens[1])]
            = decodeURIComponent(tokens[2]);
    }
    return params;
}
var $_GET = getQueryParams(document.location.search);
var holy = $_GET["strUser"] 
document.getElementById('hide').value = holy;
    $('#submit_button').click(function() { 
        $.ajax({
            type: 'POST',
            url: 'item_add.php',
            data: $('form').serialize(),
            dataType: 'json',
            beforeSend: function() {
                var item_num = $('#item_num').val();
                var descript = $('#descript').val();
                var quanti = $('#quanti').val();
                var fdaa = $('#fdaa').val();                
                if (!item_num[0] ||  !descript[0] || !quanti[0] || !fdaa[0]) { 
                    $('#output').html('All fields are required');
                    return false; 
                }                
            },
            success: function(response) {
                if (response.status == 'success') {
                    $('#formcont').html();
                }
                $('#output').html(response.errmessage);
            }
        });        
    });
}); 
</script>
</head>
<body>
<div id="formcont" style="text-align:center; margin:0; padding:0; height:100%;">
  <form id="myform">
    <fieldset>
      <div style="text-align:center; margin-bottom:20px; border-bottom:thin #000; width:100%;">
        <h2>Add an Item</h2>
      </div>
      <p>
        <label for="hide"><strong>Manufacturer:</strong></label>
        <input type="text" readonly name="hide" id="hide" size="30" value="" style="background-color:#CCC" />
      </p>
      <p>
        <label for="item_num"><strong>Item / Catalog #:</strong></label>
        <input type="text" name="item_num" id="item_num" size="30" />
      </p>

      <p>
        <label for="descript"><strong>Description:</strong></label>
        <input type="text" name="descript" id="descript" size="30" />
      </p>
      <p>
        <label for="quanti"><strong>Quantity Per Unit:</strong></label>
        <input type="text" name="quanti" id="quanti" size="30" />
      </p>
      <p>
        <label for="fdaa"><strong>Is this Item FDA Approved?</strong></label>
        <input type="text" name="fdaa" id="fdaa" size="30" />
      </p>      
    </fieldset>
    <div id="output" style="width:100%; color:red; text-align:center;"></div>
     <div style="text-align:center; margin-bottom:0px; border-bottom:thin #000; width:100%; margin-left:105px;">
        <p style="text-align:center;">
      <input type="button" value="Submit" id="submit_button" />
    </p>
      </div> 
  </form>
</div>
<div id="output"></div>
</body>
</html>

Примечание: если я уберу эту функцию, то все прекрасно работает в IE. Он отправляет в базу данных и дает мне сообщения об успехах, которые я ищу. Не уверен, что это за функция.

Ответы [ 2 ]

1 голос
/ 31 декабря 2011

Попробуйте изменить свою часть проверки следующим образом.

if (item_num == '' ||  descript == '' || quanti == '' || fdaa == '') { 
  $('#output').html('All fields are required');
  return false; 
} 

нет необходимости использовать [0] для строк.

0 голосов
/ 31 декабря 2011

успех вызывается при правильном выполнении (то есть статус 4 ИЛИ статус "complete"). Использовать ошибку для обработки ошибок ...

$.ajax({
        type: 'POST',
        url: 'item_add.php',
        data: $('form').serialize(),
        dataType: 'json',
        beforeSend: function() {
            var item_num = $('#item_num').val();
            var descript = $('#descript').val();
            var quanti = $('#quanti').val();
            var fdaa = $('#fdaa').val();                
            if (!item_num[0] ||  !descript[0] || !quanti[0] || !fdaa[0]) { 
                $('#output').html('All fields are required');
                return false; 
            }                
        },
        success: function(response) {
            ...
            $('#formcont').html();
            ...
        },
        error: function(status, errorText) {
            ...
            $('#output').html(response.errorText);
            ...
        }
});

В других случаях, когда вы ищете больше контроля на более низком уровне, вы можете использовать:

complete(jqXHR, textStatus)

следующим образом ...

...
complete: function(req, status) {
    ..
    ..
}
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...