0

Android からロードされる JS コードを含む HTML ページがありますWebView。この JavaScript は、jQuery-post-functionを使用して -site をデータとともに呼び出し、-、- (および-) パラメーターHandleAndroidJSON.aspxを含むコールバック関数を返します。datastatusjqXhr

function syncWithServer() {
    var dataToSend = Android.getDataToSend();
    $.post("HandleAndroidJSON.aspx", { data: dataToSend }, callbackDataFromServer);
}

function callbackDataFromServer(data, status) {
    Android.setDataFromServer(data, status);
}

「Android」変数は、JavaScriptInterfaceJS から Android メソッドを呼び出すことを可能にする Android で作成された変数です。

私のHandleAndroidJSON.aspx.cs-file では、Android から受け取ったデータに応じて応答を書き込みます。

public partial class HandleAndroidJSON : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

        Response.Clear();
        Response.ContentType = "text/plain";

        // Read request parameter and deserialize JSON data.
        string jsonDataFromClient = Request.Params["data"];

        // ... Do stuff with the data ...

        if (error != null)
        {
            //This goes into the data-parameter of the callbackFunction
            Response.Write(error); 
            //Response.Status = "403 Error"; //This seems to only be HTTP-status responses,
                                   //not the one used as parameter in the callback-function
        }
        else
        {
            //This does too
            Response.Write(jsonDataToSend); 
        }
        Response.End();
    }
}

Response.Write()-method はコールバック関数の-parameterで意図したとおりに戻りますが、 -parameterdataを設定できないようです。常に同じ文字列「success」を返し、 -propertyを設定しても変化しません。statusResponse.Status

問題は簡単です。 aspx.cs コードから -function (jQuery-post-function から呼び出される)のstatus-parameterを設定するにはどうすればよいですか?callbackDataFromServer

編集: HTTP のステータスコードについて話しているのではありません。StatusDescription- プロパティの- 、StatusCode- 、およびStatus- プロパティを設定しても、コールバック関数の - パラメータResponseは変更されません。status

EDIT2:とにかくAndroidでデータを再度検証する必要があるため、JavaScriptコードでステータスパラメーターを処理しても問題が解決するとは思いません(エラー処理を回避するためにJavaScriptインジェクションが可能になるため)。callbackDataFromServer現在のコードが示すように、関数内の status-parameter を介して Android メソッドに渡したいと思います。

EDIT3status : aspx-code から -parameterを設定できるかどうかについての直接的な答えが見つからないように見えますが、 data-parameter 以外で変更できるのは、jqXhr.status設定できるプロパティだけのようです。 Response.StatusCodeaspx サイトのプロパティになります。

文字列を保持するプロパティもありjqXhr.statusTextますが、statuscode に基づいたデフォルトのテキストのようであり、Response.StatusDescription(statusCode を 200 に設定し、statusDescription を「success」に設定すると、「OK」として返されます。これは、 statusCode 200)。

これは私が読んでいたトピックです: Get the jqXhr.responseText on a jQuery getJSON request using JSONP

EDIT4 : をStatusCode値に設定すると、何か問題が発生したことを意味し、メソッドResponse.Write()が呼び出されてもデータが送信されず、達成しようとしている目的が無効になることがわかりました。

適切な質問は、次のようになります:データの代わりに、何か問題が発生した場合に (ASP.NET から jQuery を介して) エラー テキストを適切に渡すにはどうすればよいでしょうか? また、転送しているデータがエラーまたは JSONData であることを確認するにはどうすればよいでしょうか? 簡単な方法は、データが「{」または「[」で始まるかどうかを確認することだと思いますが、ちょっとしたハックのように感じます。

4

1 に答える 1

2

ステータス コードを取得するにはstatus、success call back の 3 番目の引数のプロパティを使用できますjqXHR。ここではフィドルhttp://jsfiddle.net/prD5c/

あなたの関数は次のようになります

function callbackDataFromServer(data, status,jqXhr) {
    console.log(jqXhr.status);
    Android.setDataFromServer(data, status);
}

あなたはstatusCode好きなものを使うことができます

$.ajax({
  statusCode: {
    202: function() {
      alert("success");
    },
    403:function(){
      alert(error);
    }
  }
});

あなたが使用しているように、これを同様$.postに定義できますajaxSetup

$.ajaxSetup({
      statusCode: {
        202: function() {
          alert("success");
        },
        403:function(){
          alert(error);
        }
      }
    });

http://api.jquery.com/jQuery.ajax/

于 2012-05-30T21:14:52.370 に答える