首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jQuery - Ajax在GET中提交JSON数据

jQuery - Ajax在GET中提交JSON数据
EN

Stack Overflow用户
提问于 2013-09-27 01:46:19
回答 5查看 6.6K关注 0票数 0

以下是我尝试过的:

JS:

代码语言:javascript
运行
复制
$.ajax({
    type: 'GET',
    contentType: 'application/json; charset=UTF-8',
    data: JSON.stringify( { data: 'bla' } ),
    dataType: 'json',
    success: function( data ) {
        alert(data);
    },
    error: function( data ) {
        alert('error: ' + data);
    }
});

PHP:

代码语言:javascript
运行
复制
<?php

    if ( $_SERVER['REQUEST_METHOD'] == 'GET' )
    {
        $data = json_decode( file_get_contents('php://input') );

        echo json_encode( $data );
    }

?>

输出:

代码语言:javascript
运行
复制
null

如果您将GETPOST交换,那么它的工作原理就像一种魅力。“为什么不直接使用POST呢?”,我使用POST来执行数据库中的插入。我有一种预感,这可能是因为它强烈地想要这种格式的GET数据:email=bob@mctest.com&firstname=Bob&lastname=Mctest。但我不知道为什么,因为内容类型被设置为application/json,这有点让人费解。为了在这里添加我上次编辑的内容,php://input是空的,换句话说,它没有向它发送任何数据,但是它仍然工作正常,使用来自终端的curl没有问题。

当我使用JSON内容类型从终端运行curl命令时,它的工作方式就像一种魅力,没有问题地释放数据,即curl -v -X GET -H "Content-Type: application/json" -d '{"data":"bla"}' http://codes.local/test.php

我不知道这会有多大帮助,但我找到了一个PHP站点,并在其中粘贴了示例代码,这只是为了让每个人都更容易,下面是链接:http://phpfiddle.org/main/code/u4b-xkh

非常感谢您的帮助。

编辑:修复了SilverBlade指出的'application/json‘中的拼写错误,并更新了PHP链接(null输出仍然存在,换句话说,仍然不起作用)。问题是,我应该在上面说明,php://input实际上是空的--当通过jQuery发布时,里面根本没有任何数据--当与curl一起使用时没有问题。

Edit2:我不使用IIS,谢谢罗伯特德尼罗(heh)指出这一点。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-09-28 01:24:26

我的怀疑是正确的,造成问题的原因是jQuery $..ajax/$. GET在使用GET时强迫查询字符串,即使您已经将内容类型设置为JSON,这是没有意义的,但我必须对手册进行剖析,以找出原因。

下面是我的工作代码,它提供了一个与curl和$..ajax/$. GET一起工作的解决方案。

JS:

代码语言:javascript
运行
复制
$.ajax({
    type: 'GET',
    url: 'manage.php',
    data: 'user=bla',
    dataType: 'json',
    success: function( data ) {
        // code here...
    }
});

PHP:

代码语言:javascript
运行
复制
$get = !empty( $_GET ) ? json_decode( json_encode( $_GET ) ) : json_decode( file_get_contents('php://input') );
票数 2
EN

Stack Overflow用户

发布于 2013-09-27 01:58:19

内容类型有拼写错误,

代码语言:javascript
运行
复制
contentType: 'appllication/json; charset=UTF-8',

它应该是

代码语言:javascript
运行
复制
contentType: 'application/json; charset=UTF-8',

其次,您可以通过指定URL进行检查。

票数 1
EN

Stack Overflow用户

发布于 2013-09-27 02:42:19

SilverBlade可能已经发现了您的问题,但是XHR和PHP之间仍然存在通信问题。PHP必须返回正确的标头,否则jQuery解释可能会发生奇怪的事情。

尝试:

标题(“内容-类型:application/json”);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19041442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档