0

コードに奇妙な問題があり、理解できないようです。私はjsに比較的慣れておらず、httpリクエストを利用してjsonデータを取得していますが、ほとんどの場合、機能するコードを思いつくことができました.

基本的なワークフローは次のとおりです。ユーザーにいくつかのフォーム フィールド値を入力して送信ボタンを選択してもらいます。送信時にapiCall()関数が呼び出され、関数createXMLHttpRequestObject()と関数が呼び出されconstructApiURL(searchtype)てオブジェクトが作成、設定xmlHttpRequestされ、プロキシ経由で検索 API URL に送信されます。結果が返されると、関数が呼び出され、関数を使用して適切なコンテナーhandleResults()に結果が解析および表示されます。divhandleResultsContainer()

Firebug を介してコードをステップ実行すると、すべてが機能します。オブジェクトが作成され、プロキシ経由で検索 API に送信され、結果が返されて表示されますが、フォーカスが関数に戻りonsubmit(event) {callApi();}、コンテンツがクリアされると!?! ページがリロードされたのか、それとも何か他のことが起こっているのかわかりません。

初期トリガーをフォーム送信からボタン onclick に変更すると、問題なく動作します。ユーザーがボタンを選択すると、検索結果が取得されて表示され、ユーザーが再度ボタンを選択すると結果がクリアされ、新しい結果が表示されます。問題は、通常フォームから取得するパラメーターをハードコーディングする必要があることです。

誰かがこれを経験したことがありますか、またはこれを引き起こす可能性のあるブラウザによるコードの読み取り方法で何かを見たことがありますか? 私の疑似コードは以下の通りです。

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<script type="text/javascript"> 
function createXMLHttpRequestObject() { 
-- code to create the XMLHttpRequestObject based on browser type --
} 

function constructApiURL(searchtype) { 
-- code to create the api url using the form values & proxy url --
} 

function handleResultsContainer () { 
-- code to create/remove search results display div
} 

function handleResults(jsndata) { 
-- code to parse and display results here --
} 

function callApi() { 
-- code to create XMLHttpRequestObject, populate it, and send it --
} 

</script> 
</head> 
<body>

<form id="basicform" name="mashsearch" onsubmit="callApi()"> 
     -- Code for user input fields which are then used by constructApiURL --
     <input type="submit" id="searchbtn" value="Search!"/> 
</form> 

//Div displaying a Search Results Loading… message which is hidden/displayed//
<div id='loadingDiv' style="display:none">Search Results Loading...</div> 

//Div used to display the search results
<div id='json'></div> 
</body> 
</html> 
4

1 に答える 1

0

onsubmit を次のように変更します。

onsubmit="callApi();return false;"

return falseまたは、メソッドの最後に追加してcallApi()、onsubmit を次のように変更することもできます。onsubmit="return callApi()"

そうしないと、ページは通常の動作と同じように送信および再ロードされます。

于 2012-01-27T15:04:52.090 に答える