2017-05-31 10 views
1

XMLHttpRequest関数をAPIをフェッチするように変換したいと思います。しかし結果は異なります。fetch 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()を呼び出す必要があります:あなたは

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) 
 
});
身体を読んだとき bodyUsedに何が起こるかの下に

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

+0

私はすでにjson()をテストしています。** SyntaxError:JSON.parse:JSONデータの第3行第1列の予期しない文字です。** –

+0

@StéphaneRICHINOKですので、 'console.log(response.text ()) 'あなたはどうしますか? – Jamiec

+0

response.text()return page HTML code –

関連する問題