【问题标题】:Deserialize Response反序列化响应
【发布时间】:2014-02-20 08:49:59
【问题描述】:

我正在尝试从我的 html 中发布此代码的数据。

<javascript>
$(document).ready(function(){
$("#btnsubmit").click(function(e){
    e.preventDefault();
    var testData = $("#test").serialize();
    $.ajax({
        type: "POST",
        url: "ajaxSurvey.php",             
        data: {survey:testData}          
    });
});
})
</javascript>

还有我的表格

<form id="test" name="test" method="POST">
  <input name="surveyperiod" id="surveyperiod" type="date">
  <input name="deadline" id="deadline" type="date"  >
  <input type="submit" id="btnsubmit"name="btnsubmit" value="   Update    ">
</form>

和我的 php 页面

if(isset($_POST['survey']){
    $myDate = $_POST['survey'];

    mysql_query('INSERT INTO (surveyperiod,deadline) VALUES (????????)');

}

现在我该如何反序列化 $myDate 如下所示

调查期=2014-02-25&deadline=2014-02-18

【问题讨论】:

  • mysql_* 函数已被弃用。请改用 PDO 或 mysqli!
  • 这个问题和答案差不多:stackoverflow.com/questions/1792603/…
  • 它应该从脚本本身纠正,而不是从 PHP dcript
  • 谢谢lukasz,我会记住的。

标签: php ajax arrays


【解决方案1】:

棘手的方法是使用parse_str()

// Access as Variable
if( isset($_POST['survey']) ){

    // surveyperiod=2014-02-25&deadline=2014-02-18
    parse_str($_POST['survey']);

    $S_Period = $surveyperiod;
    $S_Deadline = $deadline;

   // do whatever you want
   mysql_query('INSERT INTO (surveyperiod,deadline) VALUES ( "'.$S_Period.'", "'.$S_Deadline.'" )');

}

解释:

在您的 Ajax 请求中,您通过 POST 方法(data: {survey:testData})发送数据并分配了一个 POST 变量 survey,并且此 POST 变量包含您在 javascript testData 中分配的数据字符串 surveyperiod=2014-02-25&amp;deadline=2014-02-18。现在我们要做的是,现在我们必须将字符串解析为变量,并使用 parse_str() 内置函数为您完成。就是这样:)

【讨论】:

  • jogesh_pi,太难懂了:)。太感谢了。这解决了我的问题。
  • @jules 我解释了,现在希望你能理解:)
【解决方案2】:

你不需要反序列化,你可以通过放置隐藏字段来以不同的方式做到这一点;

HTML:

<form id="test" name="test" method="POST">
  <input name="survey" type="hidden" value="true"/>
  <input name="surveyperiod" id="surveyperiod" type="date">
  <input name="deadline" id="deadline" type="date"  >
  <input type="submit" id="btnsubmit"name="btnsubmit" value="   Update    ">
</form>

PHP:

if(isset($_POST['survey']){
    $myDate = $_POST['survey'];

    mysql_query('INSERT INTO (surveyperiod,deadline) VALUES ($_POST["surveyperiod"], $_POST["deadline"])');

}

JS:

<javascript>
$(document).ready(function(){
$("#btnsubmit").click(function(e){
    e.preventDefault();
    var testData = $("#test").serialize();
    $.ajax({
        type: "POST",
        url: "ajaxSurvey.php",             
        data: testData          
    });
});
})
</javascript>

通过这样做,您不需要发布像{survey:testData} 这样的数据。只需添加,

<input name="survey" type="hidden" value="true"/>

html 并检查 php 端的隐藏字段。如果存在名称为 survey 的字段,则运行您的代码

【讨论】:

  • 感谢您的回复。
猜你喜欢
  • 2020-10-19
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
  • 2014-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多