2016-12-15 3 views
0

Я использую Ajax для отправки информации на сервер и возврата строки JSON. Это код, я использую:Ajax call failing

function getRequests(folder, mode) { 
xhr = new XMLHttpRequest(); 
xhr.onreadystatechange = singleBook(folder, mode); 
xhr.open("GET", "bestreads.php?mode=" + mode + "&title=" + folder, true); 
xhr.send(null); 
} 

function singleBook(folder, mode) { 
alert(xhr.responseText); 
if (mode == "info") { 
    var json = JSON.parse(xhr.responseText); 
} 
} 

Я проверил мой PHP скрипт, и я 100% уверен, что он правильно печатает правильную строку JSON для каждого возможного имени папки. Я подтвердил строку JSON, которую он создает, чтобы подтвердить это. Однако этот код оставляет xhr полностью пустым. Я попытался проверить статус с помощью xhr.stats, но он возвращает 0, что не имеет смысла для меня, поскольку я думал, что он должен возвращать 404 или 200.

Это школьный проект, и мне не разрешено используйте JQuery, поэтому мне нужно решение, которое не использует его. Я делаю вызов Ajax ранее в своем вызове одинаково, и он работает без каких-либо проблем, но возвращает строку XML вместо JSON, что заставляет меня думать, что мне нужно сделать что-то еще, чтобы вернуть строку JSON, но я не знаю, что это может быть.

PHP код:

function createJson($folder) { 
$path = "books/" . $folder . "/info.txt"; 
$infoFile = file($path); 
$info = '{"title":"' . $infoFile[0] . '","author":"' . $infoFile[1] . '","stars":"' . $infoFile[2] . '"}'; 
print $info; 
} 
+0

показать свой 'bestreads.php' код. – Naga

ответ

2

Вы должны назначить функцию ссылки на onreadystatechange вместо этого вы вызываете функцию singleBook и присваивая значение, возвращенное что onreadystatechange.

нужно также ждать АЯКС запроса перед обработкой его

function getRequests(folder, mode) { 
 
    var xhr = new XMLHttpRequest(); 
 
    xhr.onreadystatechange = singleBook(xhr, folder, mode); 
 
    xhr.open("GET", "bestreads.php?mode=" + mode + "&title=" + folder, true); 
 
    xhr.send(null); 
 
} 
 

 
function singleBook(xhr, folder, mode) { 
 
    return function() { 
 
    if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) { 
 
     console.log(xhr.responseText); 
 
     if (mode == "info") { 
 
     var json = JSON.parse(xhr.responseText); 
 
     } 
 
    } 
 
    } 
 
}

+0

Это возвращает строку json, но по какой-то причине все это также возвращает комментарий, который у меня есть за пределами кода PHP. Вы знаете, почему это так? – TheBandit

+0

В современных браузерах используйте 'xhr.addEventListener ('load', singleBook)' более эстетично и читаемо. – kcats

+0

@TheBandit Если этот комментарий вне вашего PHP-кода, это простой текст. Обычный текст ==. Возвращается любой выход. – icecub