【问题标题】:Can you tell me what this form is doing?你能告诉我这个表格在做什么吗?
【发布时间】:2020-08-04 15:47:15
【问题描述】:

我不明白这个表单在做什么。我对 Ajax 非常缺乏经验,对 PHP 也只有一点经验。我知道 ajax.php 在表单提交后运行,但我不明白 onsubmit 部分。

此表单目前返回错误“解析 JSON 时出错”。

<form
    action="<?=$module->path?>/ajax.php"
    method="post"
    enctype="multipart/form-data"
    class="tabmin_form"
    onsubmit="return handleAjaxForm(this, function(resp){AlertSet.addJSON(resp).show(); tabset_<?=$module?>.<?=$verb=='add'? 'getTab(\''.$tab.'\').reload(false)' : 'getTab(\''.$tab.$workshop->id.'\').close(false)'?>; tabset_<?=$module?>.getTab('view').show();}, function(resp) {AlertSet.addJSON(resp).show();})"
    autocomplete="off">

【问题讨论】:

  • 您的 JavaScript 代码中应该有一个名为 handleAjaxForm() 的函数。这就是onsubmit 正在调用的内容。
  • 这个表格做错了。

标签: php json ajax forms onsubmit


【解决方案1】:

onsubmit 只是内联事件,理想情况下,为了可维护性,您可能希望将其抽象为丑陋。


将其拉出并格式化,然后分解每一行。

handleAjaxForm - 接受 3 个参数,第一个是上下文,第二个是成功回调,第三个是错误回调。

AlertSet.addJSON(resp).show(); - 将响应传递给 AlertSet.addJSON 方法,然后使用 show() 方法链接以显示警报。

以下是 PHP 计算传递 tabset_module_name.getTab() 方法或防止 $verb == 'add' 调用 .close() 的内容。

tabset_&lt;?=$module?&gt;.&lt;?=$verb=='add'? 'getTab(\''.$tab.'\').reload(false)' : 'getTab(\''.$tab.$workshop-&gt;id.'\').close(false)'?&gt;;

然后是成功回调的最后一行:

tabset_&lt;?=$module?&gt;.getTab('view').show(); 正在调用 show 方法。

return handleAjaxForm(this, function(resp){
  //
  AlertSet.addJSON(resp).show(); 

  //
  tabset_<?=$module?>.<?=$verb=='add'? 'getTab(\''.$tab.'\').reload(false)' : 'getTab(\''.$tab.$workshop->id.'\').close(false)'?>; 

  //
  tabset_<?=$module?>.getTab('view').show();
}, function(resp) {
   AlertSet.addJSON(resp).show();
})

长话短说,发生错误是因为 resp 不是 JSON,请检查您的服务器响应的内容,最有可能是 HTML

【讨论】:

  • 这正是我想要的。谢谢。有没有办法将此指定为答案?这是我第一次发布问题。
  • 你能解释一下“resp”代表什么吗?或者设置在哪里?您是否还推荐一个尝试更清楚地理解这一点的起点?
  • 如果 这正是我想要的。 然后一定要点击接受按钮