【问题标题】:jQuery Ajax call not returning anythingjQuery Ajax 调用不返回任何内容
【发布时间】:2014-08-14 15:48:04
【问题描述】:

我在 jQuery 中有一个异步调用,其中一个 POST 请求返回一个 HTTP 200,但是没有响应文本或任何可以从相关端点处理的内容。

我对本地主机上的原因感到困惑,因为当我使用相同的调用来轮询 JSONTest 之类的服务时,我得到了一个有效的对象作为回报。

这是结果端点的样子,使用 Slim 用 PHP 编写

$app->post("/search", function() use ($app) {
    try {
        $request = $app->request;
        $body = $request->getBody();
        $input = json_decode($body);

        //Prepare search string
        $query = "%". $input->query . "%";
        $grade = '%grade ' . $input->grade . "%";
        $meta = $input->meta;

        $proc_results = array();

        $item = new stdClass();
        $item->id = 1;
        $item->source = "source";
        $item->type = "lesson_plan";
        $item->description = "Description of the Lesson Plan";
        $item->date_created = 1234567890;

        $proc_results[] = $item;

        $app->response()->header('Content-Type','application/json');
        $app->response()->body(json_encode($proc_results));

        } catch (Exception $e) {

        }
    });

使用 POSTMAN 等实用程序时,此调用确实返回 JSON 响应,但是当我使用以下测试 jQuery 代码时,我得到一个没有 responseText 或任何迹象表明我的解释器拥有该对象的对象。

$.ajax({
    "type":"POST",
    "url":"http://localhost:9001/search",
    "data":{"query":"math","grade":"4"}
}).done(function(result) { 
    console.debug(result);
});

我是否在我的 done() 调用中缺少一个组件来轮询资源?我的 Slim 调用是否发送格式错误的 JSON?如果需要,我可以在线获取工作演示。

【问题讨论】:

  • 服务器和客户端是否在同一个域/端口?
  • 是的,都存在于测试PHP Server的端口9001上。

标签: javascript jquery json rest slim


【解决方案1】:

类型、url、数据不应该是字符串。试试不串。它应该工作。数据的键也不应该是字符串。

试试这个

$.ajax({
    type:"POST",
    url:"/search",
    data:{query:"math",grade:"4"}
}).done(function(result) { 
    console.debug(result);
});

【讨论】:

  • 最好也指定内容类型和数据类型。无论如何,应该仍然可以正常工作。
  • 响应有效并返回 200,但我没有得到预期的对象类型:Object {readyState: 1, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function…}。我期待 [ { "id":1, } ] 等的东西。
  • 那么,就是服务器端的问题。不是ajax问题。确保您以正确的形式返回正确的对象。
  • 键是否被引用没有区别,两者都同样有效。
【解决方案2】:

尝试将数据类型设置为 JSON,扩展 @doniyor 的答案:

$.ajax({
    type:"POST",
    url:"/search",
    datatype:"json",
    data:{query:"math",grade:"4"}
}).done(function(result) { 
    console.debug(result);
})

见:http://api.jquery.com/jquery.ajax/

从您的 cmets 看来,您正在寻找 JSON 作为结果。

【讨论】:

    【解决方案3】:

    我找到了根本原因:我没有发送有效的 JSON 供 PHP 解析。通过添加 JSON.stringify 它按预期响应:

    $.ajax({
        type:"POST",
        url:"http://localhost:9001/search",
        dataType:"json",
        contentType: "application/json",
        data: JSON.stringify({"query": "math", "grade": "4", "meta": "z"}) 
    }).done(function(result) { 
        console.debug(result);
    });
    

    感谢大家的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-18
      • 2011-02-14
      • 1970-01-01
      • 2020-01-27
      • 2013-08-06
      • 1970-01-01
      • 2017-04-30
      • 2016-10-26
      相关资源
      最近更新 更多