0

制御できない製品に対して次のjQuery.ajax()呼び出しを行っています。

$.ajax({
    type: "POST",
    url: "/WfWsR",
    data: { method: 'getInfo',
        nodeID: nodeID
    },
    dataType: "text",
    success: function(data, response, replyxhr){
        return data;
    },
    error: function(replyxhr, response){
        console.log(response);
        console.log(replyxhr);
        return response;
    }
});

POSTは200OKで成功しますが、成功関数に移動する代わりに、応答変数が「error」に設定され、replyxhr変数がObject {readyState = 0、status = 0、statusText="に設定されてエラーになります。エラー"}。

Postmanを介して手動でPOSTを試行すると、次の結果が得られます。

new Array(
  new Array(
    new Array(
      "15", "1", ""
    )
  ), 
  new Array(
    new Array(
      "1", "3757", "3757", "user", "2013-01-22 15:09:04.354"
    )
  ), 
  new Array(
  ), 
  new Array(
    "3762", "ABCD", "test Purge Documents", "50", "purge Documents", "Administrator", "2013-01-22 15:07:57.065"
  ), "13d886ddf90"
)

それはたくさんのJavaScriptです。技術的には、これらの配列のいずれかから1つのアイテムのみが必要です。jQueryで機能しないと私が信じる理由は、特にdataType: "text"を考えると、その種の戻り値はおそらく無効であるためです。しかし、dataType:"script"も使用できません。POSTの代わりに暗黙のGETを使用し、問題のURLはGETをサポートしていません。

私が見逃している他のオプションはありますか?

4

2 に答える 2

0

私はあなたがAjaxに期待するように言っていると推測しますが、応答のtextによると、それは何か他のものを得ています。content-typeサーバーがJavascriptを提供しているように見えるので、content-typeが。であっても驚かないでしょうtext/javascript

私はこれに対処する必要はありませんでしたが、これがあなたの問題である場合、ドキュメントはjQuery1.5以降に解決策があると言っています:

複数のスペースで区切られた値:jQuery 1.5以降、jQueryはdataTypeをContent-Typeヘッダーで受け取ったものから必要なものに変換できます。たとえば、テキスト応答をXMLとして処理する場合は、dataTypeに「textxml」を使用します。また、JSONPリクエストを作成し、テキストとして受信して、jQueryによってXMLとして解釈することもできます:「jsonptextxml」。同様に、「jsonp xml」などの短縮文字列は、最初にjsonpからxmlへの変換を試み、それが失敗した場合は、jsonpからtextに変換し、次にtextからxmlに変換します。

http://api.jquery.com/jQuery.ajax/経由(dataTypeのドキュメントを参照)

つまり、これを使用dataType: "script text"して、Javascript応答をテキストとして解釈することができます。もちろん、dataType: "script"スクリプトとして解釈させるために使用することもできます。

于 2013-03-22T01:42:08.033 に答える
0

これを可能にするために、私自身のxhr呼び出し(エラー処理なし)を書くことになりました。ひどい問題に対するひどい解決策。(eval()の場合は二重に失敗します)。

var xhReq = new XMLHttpRequest();
var params = "method=getInfo&nodeID=" + nodeID;

xhReq.open("POST", "/WfWsR", true);
xhReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

xhReq.onreadystatechange = onPostSubmit;
xhReq.send(params);
var response = eval(xhReq.response);
var stepIDx = response[0][0][0];

return stepIDx;

function onPostSubmit() {
    if (xhReq.readyState==4 || xhReq.readyState=="complete") { 
        if (xhReq.status != 200) {
            alert('BadStatus');
            return;
        }
    }
}
于 2013-04-04T19:52:07.883 に答える