0

我不是 AJAX(或 jQuery)方面的专家,但是当我发送 ajax 请求时,我认为我正在做的事情很简单:

$.ajax ( requestObj );

它没有发送,我希望有人可以提供帮助。为了给出上下文,我将“requestObj”设置如下:

    //initialise a request object
    var requestObj = {};
    requestObj.response = 'ajax-response';
    requestObj.type = 'POST';
    requestObj.url =  my_config['ajax-service-list'][service]['url'];
    requestObj.data = $.extend ( requestObj.data , {
                                            action: service,
                                            other: parameters,
                                            _ajax_nonce: my_config['ajax-service-list'][service]['nonce']
    });
    requestObj.global = false;
    requestObj.timeout = 30000;
    requestObj.success = function ( r ) {
        alert ( "Success: " + r );
    }
    requestObj.error = function ( r ) {
        console.log ("FAILURE WITH AJAX Call ( " + JSON.stringify (r) + ")");
    }

有一件事可能需要解释。对“my_config”的两个引用是对我使用 Wordpress 的 wp_localize_script() 函数设置的 Javascript 变量的引用。基本上它只是提供关于在哪里可以找到 URL、要使用的 NONCE 等的上下文。我已经测试过 URL 和 NONCE 信息工作正常,所以这不应该是问题。例如,我在定义两个引用后的浏览器调试器上放了一个断点并得到以下结果: requestObj 属性的调试器输出

当我调用 ajax 函数时,它立即执行成功函数并发送值 0。查看我的 PHP 错误日志,虽然我可以看到请求从未发送过。实际发送请求可能会妨碍 $.ajax(requestOb) 吗?

更新:

感谢 Michael 的明智建议,我意识到我实际上收到了外出的请求,但由于它在本地环境中运行,因此响应速度很快。现在我怀疑这与 Wordpress 配置有关。我已经连接到 wp_ajax_[service_name] 但它立即返回 0。我将在 wordpress 论坛中使用这些新信息重新提出这个问题。

4

3 回答 3

2

您应该使用浏览器检查器来检测是否发出了 ajax 请求。打开任何检查器的网络选项卡,您可以在请求发生时观察它们。$.ajax() 方法是如何被实例化的?您可能对此有疑问,而不是 $.ajax()。

使用检查器后,查看您在标头部分发送的 $_POST 或 $_GET 数据,然后查看响应。HTTP 响应代码是 200 吗?如果它是 500,那么您可能在接收请求的 PHP 控制器中有错误。

如果您有 PHP CLI,请运行此命令以查看是否有语法错误:

php -l path/to/php/controller.php

如果您的文件中有非致命错误,您将在请求响应中看到错误输出。

在你的 php 文件顶部尝试 var_dump( $_REQUEST ),以确保文件正在接收数据,并且你可以在浏览器检查器响应中检查它。

如果您的控制器内部的程序有问题......您有一个新问题要发布。:)

于 2012-09-08T21:28:46.740 回答
0

好的,我终于回答了这个该死的问题。啊。非常非常感谢 Mathew,感谢他提供的故障排除技能,我无法做到这一点。无论如何,问题出在 AJAX 请求中,因此 Wordpress Ajax 管理器从不尊重我在 PHP 端放置的“钩子”。

我的 AJAX 请求是如何关闭的?我有一个 POST 请求,但 URL 有 GET 变量挂在它上面。基于 Wordpress 的 Ajax 请求的关键变量是“action”变量。这是 WP 的 ajax 管理器用来区分各种服务的变量,也是您将要连接的名称。

所以最后,我的网址是:

 http://mysite.com/wp-admin/admin-ajax.php

我的 POST 变量包括:

action: get-action-template

我的 wordpress 钩子是:

add_action ( 'wp_ajax_get-action-template' , 'AjaxServiceManager::ajax_handler' );

我的不眠之夜可能会继续,但它们将不再与这个该死的问题有关。:^)

于 2012-09-09T00:17:22.687 回答
0

乍一看,您的 URL 似乎有空格get_action_template。这可能是个问题。

此外,通过dataType可能会有所帮助。

如果不尝试获取不带任何参数的 JSON 响应并发布输出

于 2012-09-08T09:27:02.067 回答