2017-05-31 44 views
1

我想將XMLHttpRequest函數轉換爲獲取API。但結果是不同的。獲取API不返回相同的XMLHttpRequest返回

有一些事情我必須做的不對,但我不知道是什麼:/

我使用XMLHttpRequest承諾:

return new Promise(function (resolve, reject) { 

    let formData = new FormData($searchForm); 

    if (searchTerm.length) { 
     formData.append("search", searchTerm); 
    } 

    let request = new XMLHttpRequest(); 

    request.onreadystatechange = function() { 
     if (request.readyState === XMLHttpRequest.DONE && request.status === 200) { 
     console.log(request); 
     resolve(request.responseText); 
     } 
    }; 

    request.open($searchForm.method, $searchForm.action, true); 
    request.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); 
    request.send(formData); 

    }); 

回報(我想):

XMLHttpRequest { onreadystatechange: reload/http://localhost:3000/app_dev.php/r…", status: 200, statusText: "OK", responseType: "", response: "{"countMessage":"No product find" }

而我的功能與取取API

function searchReload() { 

    const formData = new FormData($searchForm); 
    const url = $searchForm.action; 
    const method = $searchForm.method; 

    if (searchTerm.length) { 
    formData.append('search', searchTerm); 
    } 

    const header = new Headers(); 
    header.append('X-Requested-With', 'XMLHttpRequest'); 

    return fetch(url, { 
    method: method, 
    header, 
    body: formData 
    }).then(function (response) { 
    return response; 
    }); 

} 

searchReload() 
    .then(response => { 
    return console.log(response); 
    }); 

該函數返回:

Response { type: "basic", url: " http://localhost:3000/app_dev.php/r …", redirected: false, status: 200, ok: true, statusText: "OK", headers: Headers, bodyUsed: false }

任何人都可以幫我嗎?我不知道是什麼問題,爲什麼我不能擁有迴應:「{」 countMessage「:」沒有產品找到」}!我的迴應:(

謝謝社區

+0

'bodyUsed:false'表示響應主體尚未被讀取。查看https://developer.mozilla.org/en-US/docs/Web/API/Body/bodyUsed查看如何處理這個問題的例子。 – CBroe

回答

1

你需要調用response.json()閱讀正文:下面的,當你閱讀的身體會發生什麼bodyUsed

return fetch(url, { 
    method: method, 
    header, 
    body: formData 
}).then(function (response) { 
    // perhaps check the status before doing this! 
    return response.json(); 
}); 

fetch('https://jsonplaceholder.typicode.com/posts/1').then(function(response) { 
 
    console.log(response.bodyUsed); 
 
    var res = response.json(); 
 
    console.log(response.bodyUsed); 
 
    return res; 
 
}).then(function(json) { 
 
    console.log(json) 
 
});

+0

我已經測試了json(),並且它返回** SyntaxError:JSON.parse:在JSON數據的第3行第1列的意外字符** –

+0

@StéphaneRICHINok,所以如果你'console.log(response.text ())'你得到了什麼? – Jamiec

+0

response.text()返回頁面HTML代碼 –