【问题标题】:AJAX POST will not work loading PHP page in DIVAJAX POST 无法在 DIV 中加载 PHP 页面
【发布时间】:2012-11-12 21:31:18
【问题描述】:

我对 ajax 的耐心已经消失了。无论如何不能让这个工作。老实说,我没有在 DIV 之外尝试过此操作,因为其目的是专门使用 AJAX 将表单加载并发布到所述 DIV 范围内的页面。

非常感谢您对未来的发展。

#contentmainpane 是一个 DIV。我有……

if (isset($_POST['l'])) {
echo $_POST['l']; }
else { 
echo 'nope'; }

... 在 CART 页面中加载正常,但没有收到来自 BOOK 页面的帖子(所以我在 #contentmainpane DIV 中的 CART.PHP 上没有得到回应)。 这是有问题的 BOOK 页面代码:

<form id="form1" method="POST">
<input id="l" name="l" size="45" type="text" value="book">
<input id="submit" name="submit" value="save" type="submit">
</form>


<script>
$('#form1').submit(function(event){

event.preventDefault();

var book = $('#book').serialize();
var cart = '/content/pages/cart.php';
var formdata = {"book": book}


$.ajax({

type: "POST",

url : "/content/pages/cart.php"

data: formdata,

success: function(msg){

$("#contentmainpane").load(cart);

}
});
});
</script>

【问题讨论】:

  • 在您的 ajax 参数中,尝试使用 data:book 而不是 data:formdata。您正在将您的帖子参数包装在另一个名为“book”的帖子参数中。
  • 如果你想知道在你的 PHP 脚本中使用 var_dump($_POST) 会发生什么
  • 当您使用序列化时,它会自动添加字段名称和值。无需添加变量formdata
  • 我不知道为什么您的耐心消失了,您的耐心又是如何消失的。要使代码正常工作,还有很多事情要做。请参阅下面的答案,所有这些都是合理的。 .
  • data: {'l': book} 是我得到的建议。啊。我相信我已经尝试了网络上不同示例的所有组合和排列。我试过IE和Firefox来测试。

标签: php jquery ajax post


【解决方案1】:

我注意到您正在序列化 ID 为 #Book 的表单,但您的 html 未显示 ID 为 #book...此外,您需要在 url 后加逗号

试试这个

$('#form1').submit(function(event) {
    event.preventDefault();
    var book = $('#form').serialize();
    var cart = '/content/pages/cart.php';

    $.ajax({
        type: "POST",
        url: "/content/pages/cart.php",
        data: book,
        success: function() {
            $("#contentmainpane").load(cart);
        }
    });
});

【讨论】:

  • 感谢您在网址末尾发现逗号。是的 # 东西是必需的,否则如果我测试成功就没有输出: function(msg) { alert(msg) $("#contentmainpane").load(cart);}
  • @user1850420 您提交的表单也是包含数据的表单吗?另外,您展示的 PHP 是您使用的唯一 PHP 吗?
  • 嗨 VIDesignz。第一个php页面是post发送。第二个(与第一个分开)php页面包含
  • @user1850420 嗯...好的。你能把所有与你正在做的事情相关联的 html/forms 放在你的帖子中吗?您唯一遇到的问题是认识到 $_POST['l'] 已设置吗?
【解决方案2】:

您的 data 需要是一个对象,其现有键值为 l

由于您请求的$_POST 值为“l”,因此您必须传递一个带有键“l”的数据对象。根据您的代码,您在 AJAX 调用中传递的变量 formdata 当前是 { 'book' : book}

它必须是{ 'l' : book }

或者,在您的 PHP 代码中

if(isset($_POST['book'])){...

【讨论】:

  • 谢谢,现在更正了,不幸的是加载页面没有收到帖子 - 获取空的 var_dump 值
【解决方案3】:

您可以使用 phery 库通过 AJAX 轻松地将 PHP 与 jQuery 绑定。 http://phery-php-ajax.net

你没有提到你的#book 是什么,我猜是表格吧?在这种情况下,在您的表单中使用 data-related 将使其能够在一个 AJAX 调用中加入两个表单。

在你的情况下,它会像:

<form id="form1" data-remote="function" method="POST" data-related="#book">
  <input id="l" name="l" size="45" type="text" value="book">
  <input id="submit" name="submit" value="save" type="submit">
</form>

在你的 PHP 中它将是:

function func($data){
  $r = new PheryResponse;
  // $data['l'] got what you want, also $data['submit'] is available here
  // do whatever you need to do, then update your #contentmainpane
  $r->jquery('#contentmainpane')->html('your cart.php contents');
  return $r;
}

Phery::instance()->set(array(
  'function' => 'func'
))->process();

您的逻辑现在将是服务器端,而不是客户端。这样做您可以获得更大的灵活性,因为来自服务器的代码是免费的,并且可以在需要时更改,而客户端代码则不同。

【讨论】:

  • 我可以考虑这一点——这只是另一个需要学习的东西。非常感谢。
  • 有时一个库可以事半功倍,在这种情况下,你只需要担心你真正的应用程序逻辑,而不是 AJAX / PHP / jQuery 之间的传输跨度>
【解决方案4】:

问题已解决

感谢大家的建议和努力。 codingforums 上的一位用户解决了这个 ajax 帖子问题。

这是线程http://www.codingforums.com/showthread.php?p=1294868#post1294868

向所有编码员致以最诚挚的问候

【讨论】:

    猜你喜欢
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多