【问题标题】:sending several variables using ajax (JQuery)使用 ajax (JQuery) 发送多个变量
【发布时间】:2011-12-25 21:15:03
【问题描述】:

我试图在 JQuery Ajax 调用中发送 2 个变量,但由于某种原因,这两个变量最终都捆绑在第一个变量中:

function getNextQuestion(answer, queryType)
{    
    $.ajax
    ({
        async: false,
        url: 'handlers/question_hdlr.php',
        type: 'POST',
        data: "answer="+ answer +"&queryType=" + queryType,
        dataType: "json",
        success: function(result)
        {
           ...
        },error: function(XMLHttpRequest, textStatus, errorThrown)
        {
           alert ("error: "+textStatus);
        }
    });
    return false;
}

当我在调试器中运行它时,我只得到一个变量:

$_POST["answer"],包含"answerqueryTypequeryType"

$_POST["queryType"] 不存在。

我做错了什么?

【问题讨论】:

    标签: jquery parameter-passing


    【解决方案1】:

    刚刚发现问题中的代码没有任何问题,唯一的问题是浏览器缓存的Javascript文件包含错字,即使问题已在工作副本上修复,但浏览器从未真正运行它。

    解决方案是在脚本url中添加日期和时间作为参数,以防止浏览器使用缓存版本:

    <script type="text/javascript" src="<?= $pathRoot ?>js/commline.js?<?= date(U);?>" />
    

    这很好用。

    【讨论】:

      【解决方案2】:

      您不必手动序列化您的数据。只需传递一个对象,jQuery 就会为您序列化它。

      $.ajax({
          ...
          data: { answer: answer, queryType: queryType }
      });
      

      另外,永远不要使用async:false 发出 AJAX 请求。使用同步 XHR 请求从来没有正当理由。

      【讨论】:

      • 抱歉,我刚刚发现问题所在。两种代码都有效,但我的浏览器仍在使用之前版本的 js 文件的缓存副本,其中有错字。
      • async:false 有什么问题?工作流程涉及从一个问题转到下一个问题,仅此而已。在加载下一个问题之前,我不希望用户离开并在网站上做任何其他事情。这不就是 async:false 的作用吗?
      • @Sylverdrag:同步 XHR 冻结整个浏览器 UI,这是令人尴尬的糟糕 UX。见this relevant answer
      • Outch,我的错。感谢您向我指出这一点。如果任何人都可以通过一遍又一遍地询问资源而导致浏览器崩溃,这实际上是一个严重的弱点
      猜你喜欢
      • 1970-01-01
      • 2014-10-09
      • 2021-05-22
      • 1970-01-01
      • 2017-11-01
      • 2021-12-17
      • 2012-03-08
      • 1970-01-01
      • 2014-01-20
      相关资源
      最近更新 更多