jQuery ajax 请求有效,同样的 AngularJS ajax 请求无效

Posted

技术标签:

【中文标题】jQuery ajax 请求有效,同样的 AngularJS ajax 请求无效【英文标题】:jQuery ajax request works, same AngularJS ajax request doesn't 【发布时间】:2013-09-28 19:47:54 【问题描述】:

我正在学习 AngularJS 并尝试构建从 Wordpress 获取数据的前端系统。

在后端,一切似乎都已正确设置,当我使用 jQuery ajax 请求时,它可以毫无问题地获取数据。

jQuery.ajax(
    type: 'POST',
    url: '/wp-admin/admin-ajax.php',
    data: 
        action: 'getdataajax'
    ,
    success: function(data, textStatus, XMLHttpRequest)
        console.log(data);
    ,
    error: function(MLHttpRequest, textStatus, errorThrown)
        console.log(errorThrown);
    
);

但是当我尝试用 AngularJS 做同样的事情时,它不起作用。我正在尝试使用如下代码复制 ajax 请求:

myApp.factory('productsData', function($http, $log) 
    return 
        getProducts: function(successcb) 
            return $http( 
                method: 'POST', 
                url: '/wp-admin/admin-ajax.php', 
                data: action: 'getdataajax'
            ).success(function(data, status, headers, config) 
                    successcb(data);
                    $log.info(data, status, headers(), config)

            ).error(function(data, status, headers, config) 
                    $log.warn(data, status, headers(), config)
            );
        ,

    ;
);

如果我记录它,它会输出 0。我错过了什么?

感谢您的帮助。

附:控制器如下所示:

myApp.controller('ProductsController', function ProductsController($scope, productsData) 

    $scope.sortorder = 'name';

    // $scope.products = productsData.products;
    // $scope.products = productsData.getProducts();

    productsData.getProducts(function(products)
        $scope.products = products;
    );
);

【问题讨论】:

你如何在你的控制器中使用它? 更新了帖子。我尝试过不同的方法。也发表了评论。它们都不起作用。对不起 请将其添加到问题中,在 cmets 中粘贴代码相当难看。 似乎没有其他人尝试将 Angular 与 wordpress 一起使用。我做了一些服务器测试。 PHP 正确响应。此外,如果我将数据硬编码到工厂中 - 它工作正常。老实说,这一切都很奇怪。 您可以使用console.dir(arguments) 查看成功函数中的所有参数和值吗?在 chrome 开发工具的网络选项卡中,您可以看到请求,您是否获得了相同的数据? 【参考方案1】:

在 angularjs 代码中,使用params: 而不是data:

在 jquery 中,提供给 data: 配置设置的对象将转换为查询字符串 (?key1=val1&key2=value2),除非您设置了 processData: false。在 angularjs 中,您必须使用 params: 来获取查询字符串,data: 以 json 或字符串的形式发送。

【讨论】:

它解决了这个问题。非常感谢! 应该注意这变成了服务器端的req.query

以上是关于jQuery ajax 请求有效,同样的 AngularJS ajax 请求无效的主要内容,如果未能解决你的问题,请参考以下文章

JQuery的Ajax跨域请求的

jquery中使用ajax发送post请求变成get请求

Ajax(jquery) 同时处理多个异步请求

ajax 请求上的 Cordova 升级和 jQuery 错误

JQuery中使用Ajax实现诸如登录名检测等异步请求Demo

jquery $.ajax 在 Chrome 或 Firefox 中调用会导致 401 未经授权的响应,但在 IE 中有效