0

我一直试图让我的 AJAX 工作几天,但我不明白为什么它不起作用。它不会发出任何警告并给我一个错误:Failed to load resource: the server responded with a status of 404 (Not Found) - [object%20Object]它还不断返回所有内容 NULL、JS、PHP。不知道为什么。

JS

var fullName = ["John Doe", "Jane Doe"];

$(window).load(function(){
    getList();
});

function getList(){
    $.getJSON({
       type: "GET", /* the request's method: */
       url:"/names.php",    /* the request's location: */
       data: JSON.stringify({names: fullName}), /* the request's fields: */
       contentType: "application/json; charset=utf-8",  /* the request's content-type : */
       dataType:"json", /* the response's content-type: */
       success: function(json){ /* the callback function */
         if(json.length > 0){
             $.each(json, function(i, v){
                console.info(v);
             });
          }
          else {
             alert('wtf?!');
          }
        }
    });
}

PHP

<?php
$req=array_merge($_GET, $_POST);

$names=json_decode($req['names'], true);
header('content-type: application/json; charset=utf8;');
echo json_encode($names);
4

3 回答 3

4

您应该使用$.ajax而不是getJSON. jQuery 认为整个配置对象就是 URL!

此外,当您将其更改为 时.ajax,您不必JSON.stringify输入数据,这将自动完成。所以代码应该是:

function getList(){
    $.ajax({
       type: "GET", /* the request's method: */
       url:"/names.php",    /* the request's location: */
       data: {names: fullName}, /* the request's fields: */
       contentType: "application/json; charset=utf-8",  /* the request's content-type : */
       dataType:"json", /* the response's content-type: */
       success: function(json){ /* the callback function */
         if(json.length > 0){
             $.each(json, function(i, v){
                console.info(v);
             });
         } else {
            alert('wtf?!');
         }
       }
    });
}

使用 getJSON 的较短版本可能是:

function getList(){
    $.getJSON("/names.php", {names: fullName}, function(json){ 
         if(json.length > 0){
             $.each(json, function(i, v){
                console.info(v);
             });
         } else {
             alert('wtf?!');
         }
    });
}

但随后请求将不会作为 JSON 发送(只有响应应该是 JSON)。所以你需要对你的 PHP 稍作改动:

<?php
$names=$_GET['names'];
header('content-type: application/json; charset=utf8;');
echo json_encode($names);
于 2013-03-07T03:41:46.190 回答
0

.getJSON如果 URL 中的路径是正确的,则将您的代码更改为.ajax,其余的应该工作。

API 文档

于 2013-03-07T03:42:29.867 回答
0

jQuery docs中,jQuery.getJSON 是以下内容的简写:

$.ajax({
    dataType: "json",
    url: url,
    data: data,
    success: success
});

所以你应该这样使用:

$.getJSON('/names.php', {names: fullName}, 
    function(data) {...}
);
于 2013-03-07T03:53:55.300 回答