2013-07-02 3 views
0

Я изучаю отправку формы AJAX, и я столкнулся с проблемой, когда мой вызов AJAX возвращает ошибку, в которой нет никакой информации о том, почему.Почему вызов AJAX возвращается со статусом 0

Мой метод SubmitForm выглядит следующим образом:

function SubmitForm(FormId,Container) 
{ 
    var FormElement = document.getElementById(FormId); 
    var TargetUrl = document.URL + "resource/form/" + FormId + ".php"; 
    var SubmitUrl = TargetUrl + "?action=submit"; 
    var SuccessUrl = TargetUrl + "?action=success"; 
    var ErrorUrl = TargetUrl + "?action=failure"; 
    var DataString = ""; 

    for(var i = 0; i < FormElement.length; i++) 
    { 
     if(i > 0) 
      DataString += "&" 

     DataString += FormElement.elements[i].name + "=" + FormElement[i].value; 
    } 

    $.ajax({ 
     type: "POST", 
     url: SubmitUrl, 
     data: DataString, 
     success: function() { 
     RequestAjax(Container,SuccessUrl); 
     }, 
     error: function(object, textStatus, errorThrown){ 
     console.log(textStatus + "|" + errorThrown + "|" + object.status + "|" + object.responseText); 
      RequestAjax(Container,ErrorUrl); 
     } 
    }); 
    return false; 
} 

Будучи представить от:

<input name="submit" type="submit" id="submit" class="submit" value="Login" onClick="javascript: SubmitForm('loginForm','userData');" /> 

И я получаю выход что-то вроде этого;

error||0| 

Я знаю, что URL, который я пытаюсь ударить существует, и используется в основном идентичный код, в другом случае, чтобы отправить форму, но я встретив действительно indescript проблему, которую вы видите выше.

Любой совет будет очень благодарен.

+0

Как вы звоните 'SubmitForm'? – epascarello

+0

Вообще говоря, вам не нужно делать собственное генерирование строк для данных формы. вы можете просто «сериализовать()» форму, и jquery позаботится обо всем этом для вас. С помощью вашего метода вы рискуете создавать сломанные строки, если какое-либо из названий полей/значений содержит метасимволы HTML/формы. –

+0

Благодарим вас за отзыв, но я знаю, что передаю данные так, как я намеревался, поскольку я видел эту работу - я вызываю SubmitForm из самой кнопки Submit - я добавлю код. – DigitalJedi805

ответ

1

Состояние нулевой цифры происходит от того, когда страница работает от файлового протокола, или страница обновляется при выполнении вызова Ajax. Не видя, как ваш метод вызывается, я предполагаю, что вы делаете это как

<form onsubmit="SubmitForm();" /> 

Вы пропускаете возвращение

<form onsubmit="return SubmitForm();" /> 
       ^^^^^^ 

или с входом в мыши

<input type="submit" onclick="SubmitForm();" /> 

, который должен be

<input type="submit" onclick="return SubmitForm();" /> 
                          ^^^^^^ 
+0

Очень ценится - вы зажег отсутствующую пробку. – DigitalJedi805

0

Я нахожу это, когда процесс Ajax прерывается. Это может произойти, если страница выгружена или если по какой-либо причине соединение с сервером сбрасывается.

кстати: если вы используете JQuery вы лучше строить свою PostData строку с $(FormElement).serialize()

1

Первое, что я хотел бы попробовать бы UrlEncode свои значения:

var DataString = ""; 

for(var i = 0; i < FormElement.length; i++) 
{ 
    if(i > 0) 
     DataString += "&" 

    DataString += FormElement.elements[i].name + "=" + encodeURI(FormElement[i].value); 
} 
Смежные вопросы