【问题标题】:JQuery.post callback data is nullJQuery.post 回调数据为空
【发布时间】:2012-11-05 23:59:45
【问题描述】:

我遇到了 ZEND、JQuery、PHP 和 Javascript 的问题。我对这些语言非常陌生,我只是在尝试解决它们。

我在其他情况下也有过 jquery.post 的工作,但我现在不能让它做一个简单的调用。

phtml 文件 (/admin/user.phtml)

function testJquery()
{
var url = "<?php echo $myHome2Url.'/admin/newusercallback/sessionid/'.$_SESSION['mySessionId'].'/lang/'.$_SESSION['language']?>";
console.log(url);
$.post(url,{},
function(data)
{
    window.alert("Call successful!");
    window.alert(data);
},"json");

}

PHP 文件:(AdminController.php)

public function newusercallbackAction()
{
     echo json_encode("Test");
}

存在 /admin/newusercallback.phtml 文件。

  <?php ?>

运行时,控制台会打印以下消息:

POST https://dev.myurl.ca/admin/newusercallback/sessionid/0c1a5e41-ad0a-470d-9901-305464b48908/lang/ENG
https://dev.myurl.ca/admin/newusercallback/sessionid/0c1a5e41-ad0a-470d-9901-305464b48908/lang/ENG
GET https://dev.myurl.ca/admin/user/sessionid/0c1a5e41-ad0a-470d-9901-305464b48908/lang/ENG/report_id/0/

我有 2 个弹出框出现,显示呼叫成功!和空

问题是第二个弹出框应该显示“测试”而不是 Null。

如果我直接浏览到 URL https://dev.myurl.ca/admin/newusercallback/sessionid/0c1a5e41-ad0a-470d-9901-305464b48908/lang/ENG,我的浏览器会显示一个带有文本的窗口

"Test"

(包括引号)

我的问题是,为什么testJquery的回调数据为空,直接浏览页面时正确显示数据“测试”? 除此之外,我该如何解决它!

【问题讨论】:

  • 尝试将json_encode("Text"); 更改为json_encode(array("result"=&gt;"Test"));window.alert(data); 更改为window.alert(data.result);
  • @shadow json_decode('"Test"'); codepad.org/Slqt2Aaq,也适用于 node.js
  • 试过了,效果很好jsfiddle.net/9PnRQ
  • 奇数。想知道我做了什么不同的事情。无论如何-我上面建议的是使用 json 的更好方法,因为它还允许您发送额外信息(在其他元素中)

标签: php javascript zend-framework jquery


【解决方案1】:

那是因为您的 jQuery 函数要求“json”格式,而文本“Test”不是 json。

解决方案: 1. 删除 testJquery() 函数中的“json”数据类型:

    function testJquery(){
        $.post(url,{},function(data){
            window.alert("Call successful!");
            window.alert(data);
        });
    }

2。编辑您的 AdminController.php 文件以编码数组对象

    public function newusercallbackAction(){
        echo json_encode(array("Test"));
    }

【讨论】:

  • 我在json_encoded的时候还以为变成了json对象。当我删除“json”时,对象变得未定义。添加 json 并对数组进行编码会返回一个空数组。
  • 如果你要在你的 jQuery 函数中添加“json”,确保当你直接从浏览器访问 URL 时会打印出类似 {"Key":"Test"} 或 ["Text "].
  • 我不知道这家伙为什么投了反对票……据我所知,他走在正确的轨道上。字符串本身是 not JSON。
【解决方案2】:

您的控制器似乎只响应 HTML/TEXT。 我不知道该怎么做,但你的控制器应该返回 JSON

【讨论】:

  • json_encode("Test") 应该是有效的 json php.net/manual/en/function.json-encode.php
  • 我刚试过 - 它不是。此外,如果您查看所有示例,它们使用数组。我的印象是 json_encode 只是为数组构建的......随时证明我错了。
  • 那个 json 解析器实际上比大多数都宽松得多。在我之前发布的链接中再试一次。在php函数中试一下。
  • 我在 IE 中试用了我现有的代码,它在那里工作。它只在 Firefox 和 Chrome 中失败。添加 JSON.parse 并没有解决问题。
  • From php.net/manual/en/function.json-encode.php: "json_encode() 如果给定一个字符串、整数、浮点数或布尔值,将生成一个简单值的 JSON(即,既不是对象也不是数组)一个输入值。虽然大多数解码器会接受这些值作为有效的 JSON,但有些可能不会,因为规范在这一点上是模棱两可的。“我只是查看了 RFC 4627 和 json.org,它看起来并不非常模棱两可——语法在根部需要一个对象或数组(但也许 PHP 文档早于规范?)。
【解决方案3】:

仅当响应头“Content-Type”是有效的 json mime 时才有效,即application/json。 它也发生在速记版本.getJSON

在你输出任何东西之前把它放在你的 php 中

header("Content-type: application/json; charset=utf-8");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-11
    • 2014-03-24
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    相关资源
    最近更新 更多