【问题标题】:returning data from a remote php script从远程 php 脚本返回数据
【发布时间】:2011-04-15 23:14:18
【问题描述】:

我正在使用 php/ajax 提交表单而无需刷新页面。这是我的文件-

coupon.js

jQuery(document).ready(function(){
        jQuery(".appnitro").submit( function(e) {
$.ajax({
            url     : "sms.php",
            type    : "post",
            dataType: "json",
            data    : $(this).serialize(),
            success : function( data ) {
                        for(var id in data) {
                            jQuery('#' + id).html( data[id] );
                        }
                      }

        });
//return false or
e.preventDefault();

    });

});

短信.php

    <?php
    //process form
$res = "Message successfully delivered";
    $arr = array( 'mess' => $res );
    echo json_encode( $arr );//end sms processing
    unset ($_POST);
    ?>

这是我的 html 页面的代码 -

<form id="smsform" class="appnitro" action="sms.php" method="post">
...
</form>
<div id="mess" style="background:green;"></div>

现在不是通过 ajax 提交表单而不刷新页面,而是页面被重定向到

baseurl/sms.php,页面上唯一可见的是

{"mess":"Message successfully delivered"}

我的猜测是 php 脚本没有成功返回到 jquery,因此 sms.php 的最后一部分中的回显正在显示。 我应该如何使 php 脚本成功返回? 关于如何调试的任何想法。我已尝试在 coupon.js 末尾使用 return false,但没有结果。

当我点击提交萤火虫给出以下结果 -

POST http://174.132.194.155/~kunal17/devbuzzr/wp-content/themes/street/sms.php

404 Not Found 1.29s   `jquery.min.js (line 130)`

回应

Firebug needs to POST to the server to get this information for url:
http://174.132.194.155/~kunal17/devbuzzr/wp-content/themes/street/sms.php

This second POST can interfere with some sites. If you want to send the POST again, open a new tab in Firefox, use URL 'about:config', set boolean value 'extensions.firebug.allowDoublePost' to true
This value is reset every time you restart Firefox This problem will disappear when https://bugzilla.mozilla.org/show_bug.cgi?id=430155 is shipped

【问题讨论】:

  • 只是出于好奇,unset ($_POST); 的意义何在?
  • 取消设置 $_POST 只会有意义(a)请求将花费很长时间,(b)$_POST 数组很大并且(c)即使那样它也是一个微型优化和/或不应该在 HTTP 请求中处理的事情。

标签: php ajax forms refresh


【解决方案1】:

@Fanis 使用'$'还是'jQuery'无关紧要,它们是同义词。

@Ayush 正如 Fanis 所说,如果您还没有使用 Firebug,您应该尝试一下。 我在我的服务器上检查了这个例子,工作正常,我不知道 你身边有什么问题。

您可以使用 onsubmit="return false" 禁用表单提交:

<form id="..." class="..." ... onsubmit="return false">

还要检查是否启用了 javascript,例如执行“alert('something')” 在 $(document).ready

编辑:

// instead of  
url: "sms.php"
// try
url: "/~kunal17/devbuzzr/wp-content/themes/street/sms.php"
// although I don't really know if it will help

【讨论】:

  • 我在文档准备好和表单提交后向这两个地方添加了警报,它们工作正常。但是现在当我点击提交时,神奇的是什么都没有发生。没有页面重定向,也没有消息显示。
  • 检查 Firebug 是否执行了 Ajax 请求(如果有,它将在 Firebug 控制台选项卡中可见)
  • 感谢您的澄清,米哈尔。 Javascript,甚至 jQuery,并不是我真正的强项,而且只看到使用的速记版本我认为它是唯一的。
【解决方案2】:

如果您被重定向到 sms.php 而不是进行 ajax 调用,这可能意味着您的 jQuery 代码有问题,可能是事件绑定本身。

如果不对其进行测试,我不确定,但该代码不应该是:

$(document).ready(function(){
        $(".appnitro").submit( function(e) {
$.ajax({
...

?

在 Firefox/Firebug 或 Chrome-IE/开发者工具中检查 javascript 控制台。它是否在这些行中显示任何错误?

【讨论】:

  • @ayush,你在加载 jquery.min.js 时收到 404 吗?如果是,则不会加载 jquery。查看 Firebug 中的“控制台”选项卡。它会显示任何 javascript 错误,包括如果您尝试调用 jQuery 函数而没有实际加载 jQuery。
  • 我认为它在 sms.php 上找不到显示 404。当我点击 jquery.min.js (line 130) 时,它会显示 jquery 脚本的第 130 行。
【解决方案3】:

FanisMichal Kluczka 关于事件绑定的问题可能是正确的,我自己也试过你的代码,它对我有用。

alert('X') 作为jQuery(document).ready()jQuery(".appnitro").submit() 函数中的第一个语句,并查看两者是否都显示(第一个在文档加载时,第二个在表单提交时)。

还有一件事:我建议你包括一个

header('Content-Type: application/json');

在打印您的 JSON 数据之前放入您的 sms.php 文件,以防止跨站点脚本 (XSS) 攻击。详情请参阅Don’t serve JSON as text/html

【讨论】:

  • 您是否包含了alert() 电话?加载页面或提交表单时是否出现任何消​​息?这肯定会帮助您跟踪错误的来源。正如我之前所说,您的代码确实对我有用。您报告的 Firebug Not Found 错误对我来说似乎很奇怪,因为直接打开 URL 显然有效,就像您提交表单时一样(您在提交时仍然看到 JSON 数据,不是吗?)。
猜你喜欢
  • 2015-01-02
  • 2015-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多