2013-07-02 61 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

一般来说,你不需要为表单的数据做你自己的字符串生成。你可以''serialize()'表单并且jquery会为你处理所有这些事情。如果任何字段名称/值包含HTML /表单元字符,则使用您的方法可能会产生断开的字符串。 –

+0

谢谢你的提示,但我知道我按照我打算的方式传递数据,因为我已经看到了这个工作 - 我从Submit按钮本身调用了SubmitForm - 我将添加代码。 – 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); 
}