如何在aspx-response中设置$ .post()函数的'status'参数?

时间:2012-05-30 20:57:19

标签: javascript jquery android asp.net

我有一个带有一些JS代码的HTML页面,它是从Android WebView加载的。此JavaScript使用jQuery-post-function通过数据调用HandleAndroidJSON.aspx - 网站,并返回带有data - ,status - (和jqXhr的回调函数 - )参数:

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

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

“Android”变量是在Android中创建的JavaScriptInterface,可以从JS调用Android方法。

在我的HandleAndroidJSON.aspx.cs文件中,我根据从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() - 方法按预期返回回调函数中的data - 参数,但我似乎无法设置status - 参数 - 它总是返回相同的字符串:“success”,如果设置Response.Status - 属性,则不会更改。

所以问题很简单,如何从aspx.cs代码中设置status - 函数的callbackDataFromServer - 参数(从jQuery-post-function调用)?

编辑:我不是在谈论status-codes for HTTP。设置StatusDescription - 属性的StatusCode - ,Status - 和Response - 属性不会更改回调的status - 参数-function。

EDIT2 :我不认为处理JavaScript代码中的status-parameter可以解决问题,因为无论如何我都必须再次验证Android中的数据(因为JavaScript注入是可能的要做的是避免错误处理)。我想通过callbackDataFromServer - 函数中的status-parameter将其传递给Android方法,如当前代码所示。

EDIT3 :即使我似乎找不到可以从aspx代码设置status - 参数的直接答案,但似乎唯一的事情您可以在data旁边更改 - 参数是jqXhr.status属性,可以将其设置为aspx站点中的Response.StatusCode属性。

还有jqXhr.statusText属性,其中包含一个字符串,但它似乎是基于状态码的默认文本,而不是Response.StatusDescription(将statusCode设置为200,将statusDescription设置为“成功“返回为”OK“,这是statusCode 200的默认值。

这是我正在阅读的主题:Get the jqXhr.responseText on a jQuery getJSON request using JSONP

EDIT4 :我现在发现将StatusCode设置为一个值,这意味着出现了问题,即使Response.Write() {{1}},也会导致无法发送数据-method被称为,它击败了我想要达到的目的。

然后正确的问题是:如果出现问题,我如何正确传递错误文本(从ASP.NET,通过jQuery)而不是数据?我怎样才能确保我传输的数据是错误还是JSONData? 我认为简单的方法就是检查数据是以“{”还是“[”开头,但我觉得这有点像黑客。

1 个答案:

答案 0 :(得分:2)

为了获取状态代码,您可以使用成功回调status的第三个参数的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/