2013-06-28 40 views
0

我想知道是否有可能從JSON格式從經典ASP返回ascii控制代碼到jQuery ajax調用。作爲JSON返回控制代碼爲jQuery ajax json調用

這是我的jQuery的電話:

$.ajax({ 
    url: "/jsontest.asp", 
    type: "POST", 
    cache: false, 
    dataType: "json", 
    complete: function(data) 
    { 
     var o = $.parseJSON(data.responseText.toString()); 
    }, 
    error: function(data1, data2) 
    { 
     alert("There has been an error - please try again"); 
    } 
}); 

這就是我所謂的頁面:上面

{"val1":123,"val2":"abcdef"} 

工作正常,但如果我改變我叫頁,包括ASCII字符31(1F)像這樣:

{"val1":123,"val2","abc\x1Fdef"} 

然後我在我的錯誤函數中得到警報。這可以做到,如果是這樣,請多好。

注:我使用jQuery 1.7.1和兩個IIS 6和IIS 7

我曾嘗試:\ X1F,1F%和\ u001f

綜觀數據1和數據2的值。

DATA2具有字符串 「parsererror」

DATA1是具有以下屬性的對象:

readyState: 4 
setRequestHeader: function (a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this} 
getAllResponseHeaders: function(){return s===2?n:null} 
getResponseHeader: function (a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c} 
overrideMimeType: function (a){s||(d.mimeType=a);return this} 
abort: function (a){a=a||"abort",p&&p.abort(a),w(0,a);return this} 
done: function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this} 
fail: function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this} 
progress: function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this} 
state: function(){return e} 
isResolved: function(){return!!e} 
isRejected: function(){return!!e} 
then: function (a,b,c){i.done(a).fail(b).progress(c);return this} 
always: function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this} 
pipe: function (a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()} 
promise: function (a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a} 
success: function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this} 
error: function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this} 
complete: function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this} 
statusCode: function (a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this} 
responseText: {"val1":123,"val2":"abcdef"} 
status: 200 
statusText: OK 
+0

你用雙斜槓試過了嗎? '{「val1」:123,「val2」,「abc \\ x1Fdef」}' – maqjav

+0

我現在有了,並且返回一個實際的斜線,後面跟着字符x1f – Graham

+0

閱讀RFC:http://www.ietf.org /rfc/rfc4627.tx如果我不想誤解,應該是:'{「val1」:123,「val2」,「abc%x1F/def」}' – maqjav

回答

1

首先,嘗試使用不同的ASCII碼。字符1F是「單元分隔符」。 (這是不可打印的)。檢查here

[編輯:嘗試\x20。這是一個空間。]

[編輯2:因爲你想單元分隔符和jQuery.parseJSON似乎並不喜歡它,我們將使用eval()

現在,將dataType指定爲'json'將解析來自服務器的響應;有沒有必要自己手動解析它: 我們將具體dataType爲「文本」,並手動解析JSON與eval()

$.ajax({ 
    url: "/jsontest.asp", 
    type: "POST", 
    cache: false, 
    dataType: "text", 
    success: function(data) 
    { 
     // data is "{"val1":123,"val2":"abc\x1Fdef"}" 
     var o = eval("(" + data + ')'); // parse json 

     // will split the text using \x1F as delimiter 
     var separated = o.val2.split('\x1F'); 
     // separated is now ["abc","def"] 
    }, 
    error: function(data) 
    { 
     alert("There has been an error - please try again"); 
    } 
}); 
+0

關於冒號的有效點 - 拼寫錯誤我原來的問題 - 現在糾正了。然而,它是單位分隔符,我想要的,其他非打印字符,如\ n和\ r工作 – Graham

+0

另外,如果我不解析它,然後o.val1返回undefined – Graham

+0

好吧,我編輯了我的答案。現在使用dataType'text',並使用eval來分析json。 – Lian

0

我改變了Ajax調用「文本」的數據類型,並得到一個javascript 「字符串文字中的控制字符錯誤」的parseJSON調用錯誤。

因此,它似乎無法完成,所以我已經採取了一些X1F,我用aciax調用返回時替換ascii 31。

+0

請看我的更新代碼。它不使用parseJSON。相反,我使用了eval()。爲我工作。 – Lian