0

我正在探索 AJAX 表单提交,我遇到了一个问题,我的 AJAX 调用返回一个错误,几乎没有关于原因的信息。

我的 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 存在,并且在另一个实例中使用了基本相同的代码来提交表单,但是遇到了您在上面看到的真正难以描述的问题。

任何建议将不胜感激。

4

3 回答 3

1

零状态来自于页面在文件协议之外运行或在进行 Ajax 调用时刷新页面。在没有看到如何调用您的方法的情况下,我假设您正在这样做

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

你错过了回报

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

或点击输入

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

应该是

<input type="submit" onclick="return SubmitForm();" />
                              ^^^^^^
于 2013-07-02T18:58:33.833 回答
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);
} 
于 2013-07-02T19:02:58.323 回答
0

我发现当 Ajax 进程中止时会发生这种情况。如果页面被卸载,或者服务器连接由于某种原因被重置,就会发生这种情况。

顺便说一句:如果您使用的是 jQuery,那么最好使用构建您的 postdata 字符串$(FormElement).serialize()

于 2013-07-02T18:58:57.040 回答