Jquery 调用jsonp跨域Web服务时出错

Jquery 调用jsonp跨域Web服务时出错,jquery,cordova,jsonp,Jquery,Cordova,Jsonp,我是一名.NET开发人员,试图使用PhoneGAP创建一个简单的跨平台(Android/iOS)应用程序。我在PhoneGAP应用程序中使用.NET web服务时遇到问题,这是我的JS代码: function DoIt() { var surl = "http://www.silverlight4web.com/onlinegame/rest.aspx"; $.ajax({ type: 'GET', url: surl, c

我是一名.NET开发人员,试图使用PhoneGAP创建一个简单的跨平台(Android/iOS)应用程序。我在PhoneGAP应用程序中使用.NET web服务时遇到问题,这是我的JS代码:

    function DoIt()
{
    var surl = "http://www.silverlight4web.com/onlinegame/rest.aspx";
    $.ajax({
        type: 'GET',
        url: surl,
        crossDomain: true,
        contentType: "application/javascript",
        data: { "UserID": "1234" },
        dataType: "jsonp",
        success: function(val) {
            var myjsonobject = val;
            alert(myjsonobject.accounting[0].firstname + ' ' + myjsonobject.accounting[0].lastname);
        },
        error: function(xhr, status, error) { alert(error); },
        async: false,
        cache: false
    });

}
DoIt();
</div>
</form>
这是我的服务器端页面(CS):

</div>
</form>
(ASPX):

</div>
</form>

JQuery前面的数字每次都会改变,我在google上看到过一些这样的例子,但是没有一篇文章可以解决我的问题,出了什么问题?我应该检查/更改服务器上的任何内容还是缺少一些代码?

我以前也有类似的问题(我使用node.js的服务器端),不记得我是如何修复的。我没有环境来测试你的案例。但这里有一些提示供您修复它们

</div>
</form>
  • 您需要在url中传递回调函数名,因此, var surl=“”

  • </div>
    </form>
    
  • 在页面中编写一个单独的js函数来执行json数据处理,如

    </div>
    </form>
    
     
    function success(data) {
    //your code
    var myjsonobject = data;
    alert(myjsonobject.accounting[0].firstname + ' ' + myjsonobject.accounting[0].lastname);
    }
    function DoIt()
    {
    var surl = "http://www.silverlight4web.com/onlinegame/rest.aspx";
    $.ajax({
        type: 'GET',
        url: surl,
        crossDomain: true,
        contentType: "application/javascript",
        data: { "UserID": "1234" },
        dataType: "jsonp",
        success: function(val) {
            success(val);
        },
        error: function(xhr, status, error) { alert(error); },
        async: false,
        cache: false
    });
    
    }
    DoIt();
    
  • 确保服务器端最终返回“success(yourjson数据);”,如果下面的代码不起作用,则必须使用单独的webapi/服务来执行此操作

    </div>
    </form>
    
     
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.Params["callback"] != null)
        {
            //here will return "success(...)"
            output = Request.Params["callback"] + "(" + GetData() + ");";
        }
    }
    
  • 可能需要在服务器端指定输出内容类型,例如, …Response.ContentType=“应用程序/javascript”
    让我知道它是否有效:)

    jQuery“欺骗”并将回调函数的名称设置为随机值,然后插入脚本标记,因为JSONP不是真正的ajax,jQuery只是让它看起来更简单。服务器似乎没有使用JSONP响应,也没有相应地设置包装回调函数的名称,这可能是因为您忽略了该参数,请尝试执行
    ”http://www.silverlight4web.com/onlinegame/rest.aspx?callback=?"
    并确保将回调函数的名称设置为jQuery传递的内容等。我将surl更改为=var surl=“?”;但是再次出现同样的错误,请您进一步解释一下:的确切含义是什么,并确保您将回调函数的名称设置为jQuery传递的内容,等等。?JQuery生成一个随机名称,那么我如何知道传递的是什么?通过:,在浏览器上给我正确的结果,这里出了什么问题?你能给我一些代码提示吗?我的所有代码都在上面,我应该在哪里添加Response.ContentType?你的意思是我应该使用Response.Write而不是用HTML显示输出?你试过前3步了吗?第四步不适合您的情况,因为您还显示了其他html内容。“…HTML页面”“应该由web api/web服务完成,并且只向ajax调用提供提要。您能否更详细地声明步骤2和步骤3?你能给我代码样本吗?
    </div>
    </form>